创建线程的几种方式
继承 Thread 类重写 run 方法或者 new Thread 重写 run 方法
继承Thread类
直接new Thread重写run方法
lamada简化
实现 Runnable 接口
将Runnable作为target传递给线程执行
将线程与任务(Runnable)分开
使用Runnable更容易与线程池等高级API配合
使用Runnable让任务类脱离了Thread继承体系,更灵活
实现 Callable 接口,并结合 Future 实现
源码中的注释
Callable 与 Runnable 的区别
- Callable可以抛出异常,Runnable不可以
- Callable可以获取任务执行后的返回值,Runnable不可以
FutureTask:
通过线程池创建线程(推荐)
创建Runnable作为任务给线程池执行