线程池

一、ForkJoinPool的概念

1.java7引入了一种新的线程池:ForkJoinPool:它同ThreadPoolExecutor一样,也实现了ExecutorService接口。它使用了一个无线队列保存需要执行的任务,而线程数量是通过构造函数传入,如果没有传入线程数量,计算机的CPU数量会被设置为默认值

2.ForkJoinPool使用分治法(Fork/Join原理),少量线程处理大量任务:例如对1000万数据进行排序,把任务分割成2个500w的排序任务和2个500w数据的合并任务。依次类推,对500W的数据再次分割处理,最后会有个阈值,停止分割处理,例如小于10,会转而使用插入排序对它进行排序。

3.优点:和传统的线程池对比,例如,线程池4个线程,2个线程已完成,2个线程阻塞,然后会继续阻塞下去。而这个线程池,四个线程,每个线程分了n个小任务,形成任务双端队列,fork的时候,会产生新的任务,放到队尾。出现了同样的情况,join的时候,空闲的线程会去其他线程的头部,偷取任务执行,更大的利用cpu,更高效。缺点:会创建大量子任务,导致GC进行垃圾回收。

4.适用场景:最适合计算密集型的任务

二、代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值