java并发编程实战 笔记:任务执行

excutor框架

excutor框架将任务的提交和执行分离开,任务提交会遍布到程序的各个地方,但执行策略的设置可以在一个地方,如用线程池执行还是串行执行,线程池固定长度还是变长,所有显示地使用new Thread(task)的地方都应该考虑下excutor框架

携带结果的任务callable和future

线程执行任务的构建有三种方法,1. 继承thread。2. 实现runnable接口。3. 实现callable接口。callable的抽象能有一个返回值表示任务的结果,在excutor里提交callable任务,可以返回Future对象,Future对象包装了整个任务的生命周期,可以获取返回值。

任务执行异常

Future的get获取callable执行结果,会抛出In'te'rru'p'tedException,ExcutionException,Can'ce'lationException,TimeoutException

当任务中有异常抛出的时候,调用Future的get获取结果的时候,会抛出ExcuteException,可以调用e.getCause获取真正的异常。

CompletionService

如果有多个并行任务,在获取结果的时候一个个调用对应的Future的get,如果需要先完成的先处理,则这种方式无法做到。可以使用CompletionService,内部会关联一个excutor用来提交任务,调用CompletionService的take方法来返回已完成任务的Future结构

为任务设置时限

Future的get方法可以设置timeout,还可以调用cancel方法(一般在timeout后会调用cancel方法)

猜你喜欢

转载自blog.csdn.net/xuefeiliuyuxiu/article/details/80214433