Executor ExecutorService Executors Runnable Callable Future FutureTask

Executor    执行接口  只有一个方法  void execute(Runnable command)  用来执行任务
ExecutorService  是接口Executor的子类 同时提供对线程池的关闭,执行,等方法
Executors 提供一些静态方法用于创建各种类型的线程池

Runnable  是一个接口,使用很简单
1.实现该接口,重写run方法
2.创建线程
3.线程启动后就会调用该对象的run方法
通常在开发中结合 ExecutorService 使用 ,将任务的提交与执行解耦开来
相对于Callable 以及 Future, Runnable方法不返回任务执行结果并且不能抛出异常


Callable
与Runnable 不同的是,Callable是个泛型参数化接口,并能返回线程的执行结果,并且能在无法计算时抛出异常
V call() throws Exception;
1.Callable并不像Runnable那样通过Thread的start方法就能启动实现类的run方法,所以他通常是利用ExecutorService的submit方法去启动call方法自执行任务
而ExecutorService的submit又返回一个Future类型的结果,因此Callable通常也和Future一起使用
或者利用FutureTask封装Callable再由Thread去启动(少用)
通过Executors.callable(Runnable task,T result)可以执行Runnable并返回结果,但是这个结果并不是Runnable的执行结果,而是执行者预定义的结果


Runnable与Callable不同点
1.Runnable不返回任务执行结果,Callable可返回任务执行结果
2.Callable在任务无法计算结果时抛出异常,Runnable不能
3.Runnable任务可直接有Thread的start方法或ExecutorService的submit方法去执行


Future
保存异步计算的结果,可以在我们执行任务时去做其它的工作,并提供了一下几个方法
cancel(boolean mayInterruptIfRunning):试图取消执行的任务,参数为true时直接中断正在执行的任务,否则直到当前任务执行完成,成功取消后返回true,否则返回false
isCancel():判断任务是否在正常执行完前被取消的,如果是则返回true
isDone():判断任务是否已完成
get():等待计算结果的返回,如果计算被取消了则抛出
get(long timeout,TimeUtil unit):设定计算结果的返回时间,如果在规定时间内没有返回计算结果则抛出TimeOutException
使用Future的好处
1. 获取任务的结果,判断任务是否完成,中断任务
1. Future的get方法很好的替代的了Thread.join或Thread,join(long millis)
2. Future的get方法可以判断程序代码(任务)的执行是否超时


FutureTask
FutureTask 实现了RunnableFuture接口,提供了即可以使用Runnable来执行任务,又可以使用Future执行任务并取得结果的构造器,
所以可以利用FutureTask去封装Runnable或Callable对象,之后在submit任务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值