这个线程池还是在《java性能权威指南》上看到的,对它感兴趣的地方是,它能使多个线程“一起”完成一个工作。
别的线程池是,每个线程完成一个工作,一个线程的工作完成了,也不会去帮助其它未完成的工作的线程,去完成它们未完成的工作。
但它的局限性也很大(有点小失望),它是为了配合分治算法而设计的。
什么是分治算法?就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……
直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,
如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)
但不知道可不可以像用redis中的Zset一样使用它,用一个属性进行排序或计算,用计算后的值来取得对象相关数据。。。
看了一些例子,除了分治算法,还可以用作:取得一个路径下文件夹数量,查询一篇文章中某个单词的数量(文章为一个二维数组)
这个线程池的线程,能够帮助其他线程去完成工作的原因是因为,一个小工作窃取的算法。
关于算法的具体介绍和例子,参看http://www.infoq.com/cn/articles/fork-join-introduction
在Java8中,引入了自动并行化代码,这种并行化,就依赖于ForkJoinPool。
1,Arrays类的很多新方法中都会发生。
2,Java8里面的Stream类也有应用。
参考:
分治算法:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html
关于ForkJoinool:http://www.infoq.com/cn/articles/fork-join-introduction