(多)线程应用 | 如何新建线程?
1. 创建方式
- 继承Thread类
- 实现Runnable接口
- 通过Callable和Future创建线程
- 通过线程池启动多线程
2. 区别
-
Thread和Runnable区别:
- Thread中有许多方法可以供给子类使用, 而Runnable中只有Run方法。
-
Callable和Runnable区别:
- Callable规定的方法是call(),而Runnable规定的方法是run().
- Callable的任务执行后可返回值 (void 和 Object)
- call() 可抛出异常 run() 方法不能 (run是JVM调用的,无法抛)
- 运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。
它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。
通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果。 - Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
注:Callable接口支持返回执行结果,需要调用FutureTask.get()得到,此方法会阻塞主进程的继续往下执行,如果不调用不会阻塞。