Java 多线程中 Thread、Runnable 和 FutureTask 比较
1. 用 Thread 创建一个线程
1 | public class ThreadTest { |
- 可以直接使用 this 获取当前线程
- Java 不支持多继承, 如果继承了 Thread 就不能继承其他类了
- 任务与代码没有分离, 如果多个线程执行一样的任务时需要多份任务代码
- 没有返回值
2. 用 Runnable 创建一个线程
1 | public class RunAbleTask implements Runnable { |
- 多个线程可以共享一份 task 代码逻辑
- RunAbleTask 可以继承其他类
- 没有返回值
3. 用 FutureTask 创建一个线程
1 | public class CallerTask implements Callable<String> { |
- 多个线程可以共享一份 task 代码逻辑
- FutureTask 可以继承其他类
- 有返回值
- 主线程会堵塞
总结
特性 | Thread | Runable | FutureTask |
---|---|---|---|
是否能继承其他类 | 不能 | 能 | 能 |
共享任务代码 | 不能 | 能 | 能 |
有返回值 | 没有 | 没有 | 有 |
会堵塞主线程 | 不会 | 不会 | 会 |
Java 多线程中 Thread、Runnable 和 FutureTask 比较
http://example.com/2019/12/01/Java-多线程中-Thread、Runnable-和-FutureTask-比较/