




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025銀行從業資格證考生必知試題及答案
- 理財咨詢與客戶維護的試題及答案
- 2025年國際金融理財師考試試題及答案動態掌控
- 2024年畜牧師考試準備試題及答案
- 行業評估國際金融理財師試題及答案
- 2025年國際金融理財師考試前瞻試題及答案
- 網絡編輯師資格證書考試準備工作試題及答案
- 2025年銀行從業資格證背景知識試題及答案
- 2024年網絡編輯師證書考試提升自身價值的試題及答案
- 2025年銀行從業資格證考試職業素養分析試題及答案
- 泌尿外科護理新進展
- 環衛保潔服務應急預案
- 2025年廣東佛山市高三一模高考政治試卷試題(含答案詳解)
- 二年級下冊道德與法治第8課《安全地玩》說課稿說課稿(第一課時)
- DBJ33T 1271-2022 建筑施工高處作業吊籃安全技術規程
- 一年級口算練習題-100以內無進退位
- 創新創業基礎知到智慧樹章節測試課后答案2024年秋哈爾濱理工大學
- 針刺傷警示教育課件
- 星際求職指南-札記
- 【MOOC】戲曲鑒賞-揚州大學 中國大學慕課MOOC答案
- 《初中生物實驗教學的創新與實踐》
評論
0/150
提交評論