Java 多线程的创建方式主要有以下几种:
- 继承 Thread 类并重写 run() 方法
- 实现 Runnable 接口并实现 run() 方法
- 实现 Callable 接口并实现 call() 方法,通过 FutureTask 包装器来包装成 Thread 对象
- 使用 Executor 框架、线程池等方式创建线程
详细介绍如下,带你一起领悟一把~~~
1. 继承 Thread 类并重写 run() 方法
继承 Thread 类是最基本的创建线程方式,它需要重写 run() 方法,在该方法中实现线程的具体逻辑。
示例代码:
public class MyThread extends Thread {
@Override
public void run() {
// 线程逻辑
System.out.println("Thread running...");
}
}
// 启动线程
MyThread thread = new MyThread();
thread.start();
2. 实现 Runnable 接口并实现 run() 方法
实现 Runnable 接口将线程逻辑从 Thread 类中分离出来,更加灵活。
示例代码:
public class MyRunnable implements Runnable {
@Override
public void run() {
// 线程逻辑
System.out.println("Thread running...");
}
}
// 启动线程
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
- 实现 Callable 接口并实现 call() 方法,通过 FutureTask 包装器来包装成 Thread 对象
实现 Callable 接口相较于 Runnable 接口的优点在于,它可以返回一个结果并抛出一个异常。
示例代码:
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
// 线程逻辑
Thread.sleep(1000);
return "Thread finished.";
}
}
// 启动线程
MyCallable myCallable = new MyCallable();
FutureTask<String> futureTask = new FutureTask<>(myCallable);
Thread thread = new Thread(futureTask);
thread.start();
// 获取线程返回结果
String result = futureTask.get();
System.out.println(result);
4. 使用 Executor 框架、线程池等方式创建线程
使用 Executor 框架创建线程可以更好地管理和控制线程的执行,提高程序的效率。
示例代码:
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new Runnable() {
@Override
public void run() {
// 线程逻辑
System.out.println("Thread running...");
}
});