Callable再理解
Callable
思考?
我们启动线程的方式是
new Thread(Runnable r).start
那我们实现了 Callable 的要怎么启动线程呢?我们可以传一个既实现了 Runnable 也实现了 Callable 接口的,这是适配器模式?
1、其中FutureTask实现了Runnable。
2、FutureTask 构造器中传入一个实现了 Callable 的,类似我们手写的生产者新版的构造注入。
已经有了Runnable 为什么还需要Callable?
为了更好的应对高并发,当使用Runnable时,没有返回值,假如有1000个线程,挂了2个,没有返回值我们就无法定位哪个线程出了问题,出了什么样的问题。
Runnable 和 Callable 的区别?
相同:启动都需要
new Thread().start
不同:
- Callable 调用的是call方法,Runnable 调用的是 run方法
- Callable 方法有返回值,支持泛型,Runnable 接口 run方法无返回值
- call 方法可以抛出异常,而 run方法只会在内部消化。