說一下 jdk7 的 ForkJoinPool

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,畢竟是產生在多核時代的產品,會清晰易用一些。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章