Runnable,Callable,ExecutorService,Future,FutureTask联系和区别

1、Runnable是线程Thread执行的对象,是线程执行的核心逻辑,核心方法run无法抛出异常,也没有返回值。

2、Callable不能作为Thread的构造函数参数,Callable只能被提交到线程池执行,核心方法call可以抛出异常,有返回值。

3、ExecutorService是线程池的通用接口,可以看成一个线程池。RunnableCallable可以被提交到线程池来执行,通常是调用

Future result = ExecutorService.submit(Callable a)
Future result = ExecutorService.submit(Runnable a,T param)
ExecutorService.submit(Runnable a)


4、Future是线程池提交Callable后的结果集,可以看成是Callable的执行过程实体,该对象有几个主要的方法:

get()阻塞当前线程直到本线程执行完或者报错,cancel()取消本线程的执行(强行终止本线程)

5、FutureTask是Future的唯一实现类,继承了RunnableFuture接口,RunnableFuture接口又继承了Ruuable和Future接口,该类的构造函数可以传入Callable作为参数,FutureTask的run方法实际调用了Callable的call方法。

可以看出,FutureTask实现了Runnable接口,因此FutureTask可以直接用来构造线程Thread,也可以提交到线程池来执行。

同时,FutureTask也是结果集Future本身,因此可以执行get()和cancal()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值