Java使用ForkJoin框架來并行執行任務課件_第1頁
Java使用ForkJoin框架來并行執行任務課件_第2頁
Java使用ForkJoin框架來并行執行任務課件_第3頁
Java使用ForkJoin框架來并行執行任務課件_第4頁
Java使用ForkJoin框架來并行執行任務課件_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、現代的計算機已經向多CPU方向發展,即使是普通的PC,甚至現在的智能手機、多核處理器已被廣泛應用。在未來,處理器的核心數將會發展的越來越多。雖然硬件上的多核CPU已經十分成熟,但是很多應用程序并未這種多核CPU做好準備,因此并不能很好地利用多核CPU的性能優勢。為了充分利用多CPU、多核CPU的性能優勢,級軟基軟件系統應該可以充分“挖掘”每個CPU的計算能力,決不能讓某個CPU處于“空閑”狀態。為此,可以考慮把一個任務拆分成多個“小任務”,把多個"小任務"放到多個處理器核心上并行執行。當多個“小任務”執行完成之后,再將這些執行結果合并起來即可。如下面的示意圖所示:第一步分割

2、任務。首先我們需要有一個fork類來把大任務分割成子任務,有可能子任務還是很大,所以還需要不停的分割,直到分割出的子任務足夠小。第二步執行任務并合并結果。分割的子任務分別放在雙端隊列里,然后幾個啟動線程分別從雙端隊列里獲取任務執行。子任務執行完的結果都統一放在一個隊列里,啟動一個線程從隊列里拿數據,然后合并這些數據。Java提供了ForkJoinPool來支持將一個任務拆分成多個“小任務”并行計算,再把多個“小任務”的結果合成總的計算結果。ForkJoinPool是ExecutorService的實現類,因此是一種特殊的線程池。ForkJoinPool提供了如下兩個常用的構造器。·

3、 public ForkJoinPool(int parallelism):創建一個包含parallelism個并行線程的ForkJoinPool·  public ForkJoinPool() :以Runtime.getRuntime().availableProcessors()的返回值作為parallelism來創建ForkJoinPool創建ForkJoinPool實例后,可以釣魚ForkJoinPool的submit(ForkJoinTask<T> task)或者invoke(ForkJoinTask<T> task)來執行指定任

4、務。其中ForkJoinTask代表一個可以并行、合并的任務。ForkJoinTask是一個抽象類,它有兩個抽象子類:RecursiveAction和RecursiveTask。· RecursiveTask代表有返回值的任務· RecursiveAction代表沒有返回值的任務。一、RecursiveAction下面以一個沒有返回值的大任務為例,介紹一下RecursiveAction的用法。大任務是:打印0-200的數值。小任務是:每次只能打印50個數值。java view plaincopyprint?1. import java.util.concurren

5、t.ForkJoinPool;  2. import java.util.concurrent.RecursiveAction;  3. import java.util.concurrent.TimeUnit;  4.   5. /RecursiveAction為ForkJoinTask的抽象子類,沒有返回值的任務   6. class PrintTask extends RecursiveAction   7.

6、    / 每個"小任務"最多只打印50個數   8.     private static final int MAX = 50;  9.   10.     private int start;  11.     private int

7、 end;  12.   13.     PrintTask(int start, int end)   14.         this.start = start;  15.         this.end = end;&#

8、160; 16.       17.   18.     Override  19.     protected void compute()   20.         / 當end-start的值小于MAX時候,開始打印   21.  

9、       if (end - start) < MAX)   22.             for (int i = start; i < end; i+)   23.   

10、0;             System.out.println(Thread.currentThread().getName() + "的i值:"  24.                     

11、0;   + i);  25.               26.          else   27.             / 將大任務分解成

12、兩個小任務   28.             int middle = (start + end) / 2;  29.             PrintTask left = new PrintTask(s

13、tart, middle);  30.             PrintTask right = new PrintTask(middle, end);  31.             / 并行執行兩個小任務   32. &#

14、160;           left.fork();  33.             right.fork();  34.           35.       3

15、6.   37.   38. public class ForkJoinPoolTest   39.     /* 40.      * param args 41.      * throws Exception 42.      */ 

16、 43.     public static void main(String args) throws Exception   44.         / 創建包含Runtime.getRuntime().availableProcessors()返回值作為個數的并行線程的ForkJoinPool   45.    

17、     ForkJoinPool forkJoinPool = new ForkJoinPool();  46.         / 提交可分解的PrintTask任務   47.         forkJoinPool.submit(new PrintTask(0, 200

18、);  48.         forkJoinPool.awaitTermination(2, TimeUnit.SECONDS);/阻塞當前線程直到 ForkJoinPool 中所有的任務都執行結束   49.         / 關閉線程池   50.       

19、0; forkJoinPool.shutdown();  51.       52.   53.   import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveAction;import java.util.concurrent.TimeUnit;/RecursiveAction為ForkJoinTask的抽象子類,沒有返回值的任務class PrintTask ext

20、ends RecursiveAction / 每個"小任務"最多只打印50個數private static final int MAX = 50;private int start;private int end;PrintTask(int start, int end) this.start = start;this.end = end;Overrideprotected void compute() / 當end-start的值小于MAX時候,開始打印if (end - start) < MAX) for (int i = start; i < end; i

21、+) System.out.println(Thread.currentThread().getName() + "的i值:"+ i); else / 將大任務分解成兩個小任務int middle = (start + end) / 2;PrintTask left = new PrintTask(start, middle);PrintTask right = new PrintTask(middle, end);/ 并行執行兩個小任務left.fork();right.fork();public class ForkJoinPoolTest /* * param arg

22、s * throws Exception */public static void main(String args) throws Exception / 創建包含Runtime.getRuntime().availableProcessors()返回值作為個數的并行線程的ForkJoinPoolForkJoinPool forkJoinPool = new ForkJoinPool();/ 提交可分解的PrintTask任務forkJoinPool.submit(new PrintTask(0, 200);forkJoinPool.awaitTermination(2, TimeUnit.

23、SECONDS);/阻塞當前線程直到 ForkJoinPool 中所有的任務都執行結束/ 關閉線程池forkJoinPool.shutdown();運行結果如下:java view plaincopyprint?1. ForkJoinPool-1-worker-2的i值:75  2. ForkJoinPool-1-worker-2的i值:76  3. ForkJoinPool-1-worker-2的i值:77  4. ForkJoinPool-1-worker-2的i值:78  5. ForkJoinPool-1-

24、worker-2的i值:79  6. ForkJoinPool-1-worker-2的i值:80  7. ForkJoinPool-1-worker-2的i值:81  8. ForkJoinPool-1-worker-2的i值:82  9. ForkJoinPool-1-worker-2的i值:83  10. ForkJoinPool-1-worker-2的i值:84  11. ForkJoinPool-1-worker-2的i值:85  12. Fork

25、JoinPool-1-worker-2的i值:86  13. ForkJoinPool-1-worker-2的i值:87  14. ForkJoinPool-1-worker-2的i值:88  15. ForkJoinPool-1-worker-2的i值:89  16. ForkJoinPool-1-worker-2的i值:90  17. ForkJoinPool-1-worker-2的i值:91  18. ForkJoinPool-1-worker-2的i值:92 

26、; 19. ForkJoinPool-1-worker-2的i值:93  20. ForkJoinPool-1-worker-2的i值:94  21. ForkJoinPool-1-worker-2的i值:95  22. ForkJoinPool-1-worker-2的i值:96  23. ForkJoinPool-1-worker-2的i值:97  24. ForkJoinPool-1-worker-2的i值:98  25. ForkJoinPool-1-work

27、er-2的i值:99  26. ForkJoinPool-1-worker-2的i值:50  27. ForkJoinPool-1-worker-2的i值:51  28. ForkJoinPool-1-worker-2的i值:52  29. ForkJoinPool-1-worker-2的i值:53  30. ForkJoinPool-1-worker-2的i值:54  31. ForkJoinPool-1-worker-2的i值:55  32. Fork

28、JoinPool-1-worker-2的i值:56  33. ForkJoinPool-1-worker-2的i值:57  34. ForkJoinPool-1-worker-2的i值:58  35. ForkJoinPool-1-worker-2的i值:59  36. ForkJoinPool-1-worker-2的i值:60  37. ForkJoinPool-1-worker-2的i值:61  38. ForkJoinPool-1-worker-2的i值:62 

29、; 39. ForkJoinPool-1-worker-2的i值:63  40. ForkJoinPool-1-worker-2的i值:64  41. ForkJoinPool-1-worker-2的i值:65  42. ForkJoinPool-1-worker-2的i值:66  43. ForkJoinPool-1-worker-2的i值:67  44. ForkJoinPool-1-worker-2的i值:68  45. ForkJoinPool-1-work

30、er-2的i值:69  46. ForkJoinPool-1-worker-1的i值:175  47. ForkJoinPool-1-worker-1的i值:176  48. ForkJoinPool-1-worker-1的i值:177  49. ForkJoinPool-1-worker-1的i值:178  50. ForkJoinPool-1-worker-1的i值:179  51. ForkJoinPool-1-worker-1的i值:180  52

31、. ForkJoinPool-1-worker-1的i值:181  53. ForkJoinPool-1-worker-1的i值:182  54. ForkJoinPool-1-worker-1的i值:183  55. ForkJoinPool-1-worker-1的i值:184  56. ForkJoinPool-1-worker-1的i值:185  57. ForkJoinPool-1-worker-1的i值:186  58. ForkJoinPool-1-worker-

32、1的i值:187  59. ForkJoinPool-1-worker-1的i值:188  60. ForkJoinPool-1-worker-1的i值:189  61. ForkJoinPool-1-worker-1的i值:190  62. ForkJoinPool-1-worker-1的i值:191  63. ForkJoinPool-1-worker-1的i值:192  64. ForkJoinPool-1-worker-1的i值:193  65.

33、ForkJoinPool-1-worker-1的i值:194  66. ForkJoinPool-1-worker-1的i值:195  67. ForkJoinPool-1-worker-1的i值:196  68. ForkJoinPool-1-worker-1的i值:197  69. ForkJoinPool-1-worker-1的i值:198  70. ForkJoinPool-1-worker-1的i值:199  71. ForkJoinPool-1-worker-1的

34、i值:150  72. ForkJoinPool-1-worker-1的i值:151  73. ForkJoinPool-1-worker-1的i值:152  74. ForkJoinPool-1-worker-1的i值:153  75. ForkJoinPool-1-worker-1的i值:154  76. ForkJoinPool-1-worker-1的i值:155  77. ForkJoinPool-1-worker-1的i值:156  78. Fo

35、rkJoinPool-1-worker-1的i值:157  79. ForkJoinPool-1-worker-1的i值:158  80. ForkJoinPool-1-worker-1的i值:159  81. ForkJoinPool-1-worker-1的i值:160  82. ForkJoinPool-1-worker-1的i值:161  83. ForkJoinPool-1-worker-1的i值:162  84. ForkJoinPool-1-worker-1的i值

36、:163  85. ForkJoinPool-1-worker-1的i值:164  86. ForkJoinPool-1-worker-1的i值:165  87. ForkJoinPool-1-worker-1的i值:166  88. ForkJoinPool-1-worker-1的i值:167  89. ForkJoinPool-1-worker-1的i值:168  90. ForkJoinPool-1-worker-1的i值:169  91. Fork

37、JoinPool-1-worker-1的i值:170  92. ForkJoinPool-1-worker-1的i值:171  93. ForkJoinPool-1-worker-1的i值:172  94. ForkJoinPool-1-worker-1的i值:173  95. ForkJoinPool-1-worker-1的i值:174  96. ForkJoinPool-1-worker-1的i值:125  97. ForkJoinPool-1-worker-1的i值:1

38、26  98. ForkJoinPool-1-worker-1的i值:127  99. ForkJoinPool-1-worker-1的i值:128  100. ForkJoinPool-1-worker-1的i值:129  101. ForkJoinPool-1-worker-1的i值:130  102. ForkJoinPool-1-worker-1的i值:131  103. ForkJoinPool-1-worker-1的i值:132  104. F

39、orkJoinPool-1-worker-1的i值:133  105. ForkJoinPool-1-worker-1的i值:134  106. ForkJoinPool-1-worker-1的i值:135  107. ForkJoinPool-1-worker-1的i值:136  108. ForkJoinPool-1-worker-1的i值:137  109. ForkJoinPool-1-worker-1的i值:138  110. ForkJoinPool-1-work

40、er-1的i值:139  111. ForkJoinPool-1-worker-1的i值:140  112. ForkJoinPool-1-worker-1的i值:141  113. ForkJoinPool-1-worker-1的i值:142  114. ForkJoinPool-1-worker-1的i值:143  115. ForkJoinPool-1-worker-1的i值:144  116. ForkJoinPool-1-worker-1的i值:145 &

41、#160;117. ForkJoinPool-1-worker-1的i值:146  118. ForkJoinPool-1-worker-1的i值:147  119. ForkJoinPool-1-worker-1的i值:148  120. ForkJoinPool-1-worker-1的i值:149  121. ForkJoinPool-1-worker-1的i值:100  122. ForkJoinPool-1-worker-1的i值:101  123. ForkJoin

42、Pool-1-worker-1的i值:102  124. ForkJoinPool-1-worker-1的i值:103  125. ForkJoinPool-1-worker-1的i值:104  126. ForkJoinPool-1-worker-1的i值:105  127. ForkJoinPool-1-worker-1的i值:106  128. ForkJoinPool-1-worker-1的i值:107  129. ForkJoinPool-1-worker-1的i值

43、:108  130. ForkJoinPool-1-worker-1的i值:109  131. ForkJoinPool-1-worker-1的i值:110  132. ForkJoinPool-1-worker-1的i值:111  133. ForkJoinPool-1-worker-1的i值:112  134. ForkJoinPool-1-worker-1的i值:113  135. ForkJoinPool-1-worker-1的i值:114  13

44、6. ForkJoinPool-1-worker-1的i值:115  137. ForkJoinPool-1-worker-1的i值:116  138. ForkJoinPool-1-worker-1的i值:117  139. ForkJoinPool-1-worker-1的i值:118  140. ForkJoinPool-1-worker-1的i值:119  141. ForkJoinPool-1-worker-1的i值:120  142. ForkJoinPool-1-

45、worker-1的i值:121  143. ForkJoinPool-1-worker-1的i值:122  144. ForkJoinPool-1-worker-1的i值:123  145. ForkJoinPool-1-worker-1的i值:124  146. ForkJoinPool-1-worker-1的i值:25  147. ForkJoinPool-1-worker-1的i值:26  148. ForkJoinPool-1-worker-1的i值:27 

46、 149. ForkJoinPool-1-worker-1的i值:28  150. ForkJoinPool-1-worker-1的i值:29  151. ForkJoinPool-1-worker-1的i值:30  152. ForkJoinPool-1-worker-1的i值:31  153. ForkJoinPool-1-worker-1的i值:32  154. ForkJoinPool-1-worker-1的i值:33  155. ForkJoinPool-

47、1-worker-1的i值:34  156. ForkJoinPool-1-worker-1的i值:35  157. ForkJoinPool-1-worker-1的i值:36  158. ForkJoinPool-1-worker-1的i值:37  159. ForkJoinPool-1-worker-1的i值:38  160. ForkJoinPool-1-worker-1的i值:39  161. ForkJoinPool-1-worker-1的i值:40 &#

48、160;162. ForkJoinPool-1-worker-1的i值:41  163. ForkJoinPool-1-worker-1的i值:42  164. ForkJoinPool-1-worker-1的i值:43  165. ForkJoinPool-1-worker-1的i值:44  166. ForkJoinPool-1-worker-1的i值:45  167. ForkJoinPool-1-worker-1的i值:46  168. ForkJoinPool-1-

49、worker-1的i值:47  169. ForkJoinPool-1-worker-1的i值:48  170. ForkJoinPool-1-worker-1的i值:49  171. ForkJoinPool-1-worker-1的i值:0  172. ForkJoinPool-1-worker-1的i值:1  173. ForkJoinPool-1-worker-1的i值:2  174. ForkJoinPool-1-worker-1的i值:3  17

50、5. ForkJoinPool-1-worker-1的i值:4  176. ForkJoinPool-1-worker-1的i值:5  177. ForkJoinPool-1-worker-1的i值:6  178. ForkJoinPool-1-worker-1的i值:7  179. ForkJoinPool-1-worker-1的i值:8  180. ForkJoinPool-1-worker-1的i值:9  181. ForkJoinPool-1-worker-1的i值:

51、10  182. ForkJoinPool-1-worker-1的i值:11  183. ForkJoinPool-1-worker-1的i值:12  184. ForkJoinPool-1-worker-1的i值:13  185. ForkJoinPool-1-worker-1的i值:14  186. ForkJoinPool-1-worker-1的i值:15  187. ForkJoinPool-1-worker-1的i值:16  188. ForkJ

52、oinPool-1-worker-1的i值:17  189. ForkJoinPool-1-worker-1的i值:18  190. ForkJoinPool-1-worker-1的i值:19  191. ForkJoinPool-1-worker-1的i值:20  192. ForkJoinPool-1-worker-1的i值:21  193. ForkJoinPool-1-worker-1的i值:22  194. ForkJoinPool-1-worker-1的i值:23

53、  195. ForkJoinPool-1-worker-1的i值:24  196. ForkJoinPool-1-worker-2的i值:70  197. ForkJoinPool-1-worker-2的i值:71  198. ForkJoinPool-1-worker-2的i值:72  199. ForkJoinPool-1-worker-2的i值:73  200. ForkJoinPool-1-worker-2的i值:74  ForkJoinPool

54、-1-worker-2的i值:75ForkJoinPool-1-worker-2的i值:76ForkJoinPool-1-worker-2的i值:77ForkJoinPool-1-worker-2的i值:78ForkJoinPool-1-worker-2的i值:79ForkJoinPool-1-worker-2的i值:80ForkJoinPool-1-worker-2的i值:81ForkJoinPool-1-worker-2的i值:82ForkJoinPool-1-worker-2的i值:83ForkJoinPool-1-worker-2的i值:84ForkJoinPool-1-worker-

55、2的i值:85ForkJoinPool-1-worker-2的i值:86ForkJoinPool-1-worker-2的i值:87ForkJoinPool-1-worker-2的i值:88ForkJoinPool-1-worker-2的i值:89ForkJoinPool-1-worker-2的i值:90ForkJoinPool-1-worker-2的i值:91ForkJoinPool-1-worker-2的i值:92ForkJoinPool-1-worker-2的i值:93ForkJoinPool-1-worker-2的i值:94ForkJoinPool-1-worker-2的i值:95For

56、kJoinPool-1-worker-2的i值:96ForkJoinPool-1-worker-2的i值:97ForkJoinPool-1-worker-2的i值:98ForkJoinPool-1-worker-2的i值:99ForkJoinPool-1-worker-2的i值:50ForkJoinPool-1-worker-2的i值:51ForkJoinPool-1-worker-2的i值:52ForkJoinPool-1-worker-2的i值:53ForkJoinPool-1-worker-2的i值:54ForkJoinPool-1-worker-2的i值:55ForkJoinPool-

57、1-worker-2的i值:56ForkJoinPool-1-worker-2的i值:57ForkJoinPool-1-worker-2的i值:58ForkJoinPool-1-worker-2的i值:59ForkJoinPool-1-worker-2的i值:60ForkJoinPool-1-worker-2的i值:61ForkJoinPool-1-worker-2的i值:62ForkJoinPool-1-worker-2的i值:63ForkJoinPool-1-worker-2的i值:64ForkJoinPool-1-worker-2的i值:65ForkJoinPool-1-worker-2

58、的i值:66ForkJoinPool-1-worker-2的i值:67ForkJoinPool-1-worker-2的i值:68ForkJoinPool-1-worker-2的i值:69ForkJoinPool-1-worker-1的i值:175ForkJoinPool-1-worker-1的i值:176ForkJoinPool-1-worker-1的i值:177ForkJoinPool-1-worker-1的i值:178ForkJoinPool-1-worker-1的i值:179ForkJoinPool-1-worker-1的i值:180ForkJoinPool-1-worker-1的i值:

59、181ForkJoinPool-1-worker-1的i值:182ForkJoinPool-1-worker-1的i值:183ForkJoinPool-1-worker-1的i值:184ForkJoinPool-1-worker-1的i值:185ForkJoinPool-1-worker-1的i值:186ForkJoinPool-1-worker-1的i值:187ForkJoinPool-1-worker-1的i值:188ForkJoinPool-1-worker-1的i值:189ForkJoinPool-1-worker-1的i值:190ForkJoinPool-1-worker-1的i值:

60、191ForkJoinPool-1-worker-1的i值:192ForkJoinPool-1-worker-1的i值:193ForkJoinPool-1-worker-1的i值:194ForkJoinPool-1-worker-1的i值:195ForkJoinPool-1-worker-1的i值:196ForkJoinPool-1-worker-1的i值:197ForkJoinPool-1-worker-1的i值:198ForkJoinPool-1-worker-1的i值:199ForkJoinPool-1-worker-1的i值:150ForkJoinPool-1-worker-1的i值:

61、151ForkJoinPool-1-worker-1的i值:152ForkJoinPool-1-worker-1的i值:153ForkJoinPool-1-worker-1的i值:154ForkJoinPool-1-worker-1的i值:155ForkJoinPool-1-worker-1的i值:156ForkJoinPool-1-worker-1的i值:157ForkJoinPool-1-worker-1的i值:158ForkJoinPool-1-worker-1的i值:159ForkJoinPool-1-worker-1的i值:160ForkJoinPool-1-worker-1的i值:

62、161ForkJoinPool-1-worker-1的i值:162ForkJoinPool-1-worker-1的i值:163ForkJoinPool-1-worker-1的i值:164ForkJoinPool-1-worker-1的i值:165ForkJoinPool-1-worker-1的i值:166ForkJoinPool-1-worker-1的i值:167ForkJoinPool-1-worker-1的i值:168ForkJoinPool-1-worker-1的i值:169ForkJoinPool-1-worker-1的i值:170ForkJoinPool-1-worker-1的i值:

63、171ForkJoinPool-1-worker-1的i值:172ForkJoinPool-1-worker-1的i值:173ForkJoinPool-1-worker-1的i值:174ForkJoinPool-1-worker-1的i值:125ForkJoinPool-1-worker-1的i值:126ForkJoinPool-1-worker-1的i值:127ForkJoinPool-1-worker-1的i值:128ForkJoinPool-1-worker-1的i值:129ForkJoinPool-1-worker-1的i值:130ForkJoinPool-1-worker-1的i值:

64、131ForkJoinPool-1-worker-1的i值:132ForkJoinPool-1-worker-1的i值:133ForkJoinPool-1-worker-1的i值:134ForkJoinPool-1-worker-1的i值:135ForkJoinPool-1-worker-1的i值:136ForkJoinPool-1-worker-1的i值:137ForkJoinPool-1-worker-1的i值:138ForkJoinPool-1-worker-1的i值:139ForkJoinPool-1-worker-1的i值:140ForkJoinPool-1-worker-1的i值:

65、141ForkJoinPool-1-worker-1的i值:142ForkJoinPool-1-worker-1的i值:143ForkJoinPool-1-worker-1的i值:144ForkJoinPool-1-worker-1的i值:145ForkJoinPool-1-worker-1的i值:146ForkJoinPool-1-worker-1的i值:147ForkJoinPool-1-worker-1的i值:148ForkJoinPool-1-worker-1的i值:149ForkJoinPool-1-worker-1的i值:100ForkJoinPool-1-worker-1的i值:

66、101ForkJoinPool-1-worker-1的i值:102ForkJoinPool-1-worker-1的i值:103ForkJoinPool-1-worker-1的i值:104ForkJoinPool-1-worker-1的i值:105ForkJoinPool-1-worker-1的i值:106ForkJoinPool-1-worker-1的i值:107ForkJoinPool-1-worker-1的i值:108ForkJoinPool-1-worker-1的i值:109ForkJoinPool-1-worker-1的i值:110ForkJoinPool-1-worker-1的i值:

67、111ForkJoinPool-1-worker-1的i值:112ForkJoinPool-1-worker-1的i值:113ForkJoinPool-1-worker-1的i值:114ForkJoinPool-1-worker-1的i值:115ForkJoinPool-1-worker-1的i值:116ForkJoinPool-1-worker-1的i值:117ForkJoinPool-1-worker-1的i值:118ForkJoinPool-1-worker-1的i值:119ForkJoinPool-1-worker-1的i值:120ForkJoinPool-1-worker-1的i值:

68、121ForkJoinPool-1-worker-1的i值:122ForkJoinPool-1-worker-1的i值:123ForkJoinPool-1-worker-1的i值:124ForkJoinPool-1-worker-1的i值:25ForkJoinPool-1-worker-1的i值:26ForkJoinPool-1-worker-1的i值:27ForkJoinPool-1-worker-1的i值:28ForkJoinPool-1-worker-1的i值:29ForkJoinPool-1-worker-1的i值:30ForkJoinPool-1-worker-1的i值:31Fork

69、JoinPool-1-worker-1的i值:32ForkJoinPool-1-worker-1的i值:33ForkJoinPool-1-worker-1的i值:34ForkJoinPool-1-worker-1的i值:35ForkJoinPool-1-worker-1的i值:36ForkJoinPool-1-worker-1的i值:37ForkJoinPool-1-worker-1的i值:38ForkJoinPool-1-worker-1的i值:39ForkJoinPool-1-worker-1的i值:40ForkJoinPool-1-worker-1的i值:41ForkJoinPool-1

70、-worker-1的i值:42ForkJoinPool-1-worker-1的i值:43ForkJoinPool-1-worker-1的i值:44ForkJoinPool-1-worker-1的i值:45ForkJoinPool-1-worker-1的i值:46ForkJoinPool-1-worker-1的i值:47ForkJoinPool-1-worker-1的i值:48ForkJoinPool-1-worker-1的i值:49ForkJoinPool-1-worker-1的i值:0ForkJoinPool-1-worker-1的i值:1ForkJoinPool-1-worker-1的i值

71、:2ForkJoinPool-1-worker-1的i值:3ForkJoinPool-1-worker-1的i值:4ForkJoinPool-1-worker-1的i值:5ForkJoinPool-1-worker-1的i值:6ForkJoinPool-1-worker-1的i值:7ForkJoinPool-1-worker-1的i值:8ForkJoinPool-1-worker-1的i值:9ForkJoinPool-1-worker-1的i值:10ForkJoinPool-1-worker-1的i值:11ForkJoinPool-1-worker-1的i值:12ForkJoinPool-1-

72、worker-1的i值:13ForkJoinPool-1-worker-1的i值:14ForkJoinPool-1-worker-1的i值:15ForkJoinPool-1-worker-1的i值:16ForkJoinPool-1-worker-1的i值:17ForkJoinPool-1-worker-1的i值:18ForkJoinPool-1-worker-1的i值:19ForkJoinPool-1-worker-1的i值:20ForkJoinPool-1-worker-1的i值:21ForkJoinPool-1-worker-1的i值:22ForkJoinPool-1-worker-1的i

73、值:23ForkJoinPool-1-worker-1的i值:24ForkJoinPool-1-worker-2的i值:70ForkJoinPool-1-worker-2的i值:71ForkJoinPool-1-worker-2的i值:72ForkJoinPool-1-worker-2的i值:73ForkJoinPool-1-worker-2的i值:74從上面結果來看,ForkJoinPool啟動了兩個線程來執行這個打印任務,這是因為筆者的計算機的CPU是雙核的。不僅如此,讀者可以看到程序雖然打印了0-199這兩百個數字,但是并不是連續打印的,這是因為程序將這個打印任務進行了分解,分解后的任務

74、會并行執行,所以不會按順序從0打印 到199。二、RecursiveTask下面以一個有返回值的大任務為例,介紹一下RecursiveTask的用法。大任務是:計算隨機的100個數字的和。小任務是:每次只能20個數值的和。java view plaincopyprint?1. import java.util.Random;  2. import java.util.concurrent.ForkJoinPool;  3. import java.util.concurrent.Future;  4. i

75、mport java.util.concurrent.RecursiveTask;  5.   6. /RecursiveTask為ForkJoinTask的抽象子類,有返回值的任務   7. class SumTask extends RecursiveTask<Integer>   8.     / 每個"小任務"最多只打印50個數   9.  

76、60;  private static final int MAX = 20;  10.     private int arr;  11.     private int start;  12.     private int end;  13.   14.     SumTask(int arr, int start, int end)   15.   

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論