Java多线程实现:Thread、Runnable与Callable详解
多线程的实现方式:
继承Thread类的方式进行实现
-
继承Thread类
通过继承Thread
类并重写run()
方法来实现多线程。创建子类实例后,调用start()
方法启动线程。
public class Test3 {public static void main(String[] args) throws IOException {Friend f1=new Friend();Friend f2=new Friend();f1.setName("线程1");f2.setName("线程2");//开启线程f1.start();//开启第二个线程f2.start();}}
public class Friend extends Thread{@Overridepublic void run() {//书写线程要执行的代码for (int i = 0; i < 100; i++) {System.out.println(getName()+"hello");}}
}
2.实现Runnable接口
通过实现Runnable
接口并实现run()
方法来实现多线程。将实现类实例作为参数传递给Thread
对象,然后调用start()
方法启动线程。
// 实现Runnable接口
class MyRunnable implements Runnable {@Overridepublic void run() {// 线程执行的任务for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + " - " + i);}}
}public class Main {public static void main(String[] args) {// 创建Runnable实现类的实例MyRunnable myRunnable = new MyRunnable();// 将Runnable实例作为参数传递给Thread对象Thread thread = new Thread(myRunnable);// 启动线程thread.start();// 主线程继续执行其他任务for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + " - " + i);}}
}
3.实现Callable接口
通过实现Callable
接口并实现call()
方法来实现多线程。与Runnable
不同,Callable
可以返回执行结果并抛出异常。通常与FutureTask
或线程池结合使用。
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class CallableExample {// 实现Callable接口static class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {// 模拟一个耗时操作Thread.sleep(1000);return "Callable任务执行完成";}}public static void main(String[] args) {// 创建Callable实例MyCallable callable = new MyCallable();// 使用FutureTask包装CallableFutureTask<String> futureTask = new FutureTask<>(callable);// 创建线程并启动Thread thread = new Thread(futureTask);thread.start();try {// 获取Callable的返回结果String result = futureTask.get();System.out.println(result);} catch (InterruptedException | ExecutionException e) {e.printStackTrace();}}
}