JAVA并发编程之结构化并发应用程序01

1.Executor框架

线程池:从字面含义来看,是指管理一组同构工作线程的资源池。线程池是与工作队列密切相关,其中在工作队列中保存了所有等待了所有等待执行的任务。工作者线程的线程很简单:从工作队列中获取一个任务,并执行,然后返回线程池并等待下一个任务。

类库提供了灵活的线程池以及有用的默认配置。可以通过Executors中静态工厂方法之一来创建线程池

newFixedThreadPool:创建一个固定长度的线程池

newCachedThreadPool:创建一个可以缓存的线程池,如果线程池的当前规模超过了处理需求是,那么会回收空闲的线程

newSingleThreadExecutor:是一个单线程的Executor,它创建单个工作者执行任务,如果线程异常,会创建另一个线程

newScheduledThreadPool:创建一个固定长度的线程池,而且以延迟或者依照任务在队列中的顺序来串行执行

线程池的关闭方式,ExecutorService的生命周期运行、关闭、已终止

shutdown:不在接受任务,同时等待执行已提交的任务

shutdownNow:取消所有运行中的任务,并且不在启动队列中尚未开始执行的任务

Timer的缺陷:Timer在执行定时任务只会创建一个线程,当出现多个任务会出现丢失调用,如果TimerTask抛出了一个未检查的异常,Timer线程并不捕获,并终止定时任务

Callable:形象得描述为带返回值的Runnable,在执行期间可以抛出异常,在Executor中包含了一些辅助方法封装成Callable,Executor执行的任务有4个生命后期,创建、提交、开始、完成。

多个FutureTask,执行的任务时间相差不多的时候,可以不考虑效率问题,当任务执行效率不同时,存在局限性,举个例子:子任务1执行完成的时间要1000ms,子任务2执行完成的任务需要10000ms,增加了代码的复杂性,结果提升的性能才1000ms

如果向Executor提交一组计算任务,当希望计算完成后,立马获取运算结果,或许ExecutorCompletionService能帮到你,具体的用法可以参考api文档

为task设置超时,单个子任务设置超时,Future中get设置超时时间,设置所有任务的超时时间,也可以是用ExecutorService中invokeAll方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值