说一下 jdk7 的 ForkJoinPool

来源:互联网 发布:单片机一键开关机 编辑:程序博客网 时间:2024/06/02 09:38

by yinmingjun


网上找了一下 ForkJoinPool 的资料,发现资料不多,看来大多的兄弟还留在 Executors 的坑里没出来。


简单的说,ForkJoinPool 是更好的线程池的技术,主要是面向目前的多线程高并发的场景提供的底层工具,理念和性能上比原来的线程池模式高不少(没测试比较,只是直觉),像scala的promise模式的底层,直接用的就是ForkJoinPool


下面,简单说一下使用方法:

1、生成一个ForkJoinTask



2、创建 ForkJoinPool 执行 task




就是这么简单。



简单的说一下 ForkJoinPool 的特性:

1、ForkJoinPool的默认构造是根据机器的CPU数量构造线程池的大小的,也就是说一般有一个ForkJoinPool就够了。



2、ForkJoinPool 的 execute 把 task 提交到队列就立即返回



3、按照契约,task 的 get 方法会等待task执行结束,要么带回结果,要么带回异常



4、invoke方法 = execute + get 合体




PS : 当然,既然是 ForkJoinPool,就避免不了去说 task 的 fork 和 join 方法,自己看一下:





语义层面,fork把自己重新调度执行,join 等待 task 结束,和 get 类似。


有时间可以看看JDK的代码,注释很清晰。我个人推荐 ForkJoinPool,毕竟是产生在多核时代的产品,会清晰易用一些。




0 0
原创粉丝点击