摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請(qǐng)注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言提供了另外一個(gè)很有用的線程池框架框架理論框架主要有以下兩個(gè)類組成這個(gè)類實(shí)現(xiàn)了接口和工作竊取算法它管理工作者線程并提供任務(wù)的狀態(tài)信息以及任務(wù)的執(zhí)行信息這個(gè)類是一個(gè)將在執(zhí)行
引言本人郵箱:
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明網(wǎng)址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代碼已經(jīng)全部托管github有需要的同學(xué)自行下載
java 7提供了另外一個(gè)很有用的線程池框架,Fork/Join框架
理論Fork/Join框架主要有以下兩個(gè)類組成.
ForkJoinPool 這個(gè)類實(shí)現(xiàn)了ExecutorService接口和工作竊取算法(Work-Stealing Algorithm).它管理工作者線程,并提供任務(wù)的狀態(tài)信息,以及任務(wù)的執(zhí)行信息
ForkJoinTask 這個(gè)類是一個(gè)將在ForkJoinPool執(zhí)行的任務(wù)的基類.
Fork/Join框架提供了在一個(gè)任務(wù)里執(zhí)行fork()和join()操作的機(jī)制和控制任務(wù)狀態(tài)的方法.通常,為了實(shí)現(xiàn)Fork/Join任務(wù),需要實(shí)現(xiàn)一個(gè)以下兩個(gè)類之一的子類
RecursiveAction 用于任務(wù)沒有返回值的場(chǎng)景
RecursiveTask 用于任務(wù)有返回值的場(chǎng)景.
例子 先定個(gè)小目標(biāo),1億就太多,先賺個(gè)一百萬吧現(xiàn)在你是一個(gè)深圳片區(qū)的某公司高級(jí)銷售主管.現(xiàn)在定了一個(gè)目標(biāo),就是要賺個(gè)一百,讓你一個(gè)人去賺,肯定有難度的.好在有一般手下,把目標(biāo)縮小,讓小弟們?nèi)ベ?我們坐等拿錢.ok,開始編程
首先我們要定義個(gè)賺錢任務(wù) MakeMoneyTask,如果要賺錢的目標(biāo)小于最小目標(biāo),比如十萬,那么就自己去完成,否則,就把任務(wù)分給小弟們?nèi)プ?
public class MakeMoneyTask extends RecursiveTask{ private static final int MIN_GOAL_MONEY = 100000; private int goalMoney; private String name; private static final AtomicLong employeeNo = new AtomicLong(); public MakeMoneyTask(int goalMoney){ this.goalMoney = goalMoney; this.name = "員工" + employeeNo.getAndIncrement() + "號(hào)"; } @Override protected Integer compute() { if (this.goalMoney < MIN_GOAL_MONEY){ System.out.println(name + ": 老板交代了,要賺 " + goalMoney + " 元,為了買車買房,加油吧...."); return makeMoney(); }else{ int subThreadCount = ThreadLocalRandom.current().nextInt(10) + 2; System.out.println(name + ": 上級(jí)要我賺 " + goalMoney + ", 有點(diǎn)小多,沒事讓我" + subThreadCount + "個(gè)手下去完成吧," + "每人賺個(gè) " + Math.ceil(goalMoney * 1.0 / subThreadCount) + "元應(yīng)該沒問題..."); List tasks = new ArrayList<>(); for (int i = 0; i < subThreadCount; i ++){ tasks.add(new MakeMoneyTask(goalMoney / subThreadCount)); } Collection makeMoneyTasks = invokeAll(tasks); int sum = 0; for (MakeMoneyTask moneyTask : makeMoneyTasks){ try { sum += moneyTask.get(); } catch (Exception e) { e.printStackTrace(); } } System.out.println(name + ": 嗯,不錯(cuò),效率還可以,終于賺到 " + sum + "元,趕緊邀功去...."); return sum; } } private Integer makeMoney(){ int sum = 0; int day = 1; try { while (true){ Thread.sleep(ThreadLocalRandom.current().nextInt(500)); int money = ThreadLocalRandom.current().nextInt(MIN_GOAL_MONEY / 3); System.out.println(name + ": 在第 " + (day ++) + " 天賺了" + money); sum += money; if (sum >= goalMoney){ System.out.println(name + ": 終于賺到 " + sum + " 元, 可以交差了..."); break; } } } catch (InterruptedException e) { e.printStackTrace(); } return sum; } }
最后我們寫一個(gè)測(cè)試類
public class TestMain { public static void main(String[] args) throws ExecutionException, InterruptedException { ForkJoinPool pool = new ForkJoinPool(); ForkJoinTasktask = pool.submit(new MakeMoneyTask(1000000)); do { try { TimeUnit.MILLISECONDS.sleep(5); }catch (InterruptedException e){ e.printStackTrace(); } }while (!task.isDone()); pool.shutdown(); System.out.println(task.get()); } }
運(yùn)作之后結(jié)果如下:
員工0號(hào): 上級(jí)要我賺 1000000, 有點(diǎn)小多,沒事讓我10個(gè)手下去完成吧,每人賺個(gè) 100000.0元應(yīng)該沒問題...
員工1號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我7個(gè)手下去完成吧,每人賺個(gè) 14286.0元應(yīng)該沒問題...
員工11號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工10號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我5個(gè)手下去完成吧,每人賺個(gè) 20000.0元應(yīng)該沒問題...
員工18號(hào): 老板交代了,要賺 20000 元,為了買車買房,加油吧....
員工9號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我3個(gè)手下去完成吧,每人賺個(gè) 33334.0元應(yīng)該沒問題...
員工23號(hào): 老板交代了,要賺 33333 元,為了買車買房,加油吧....
員工22號(hào): 老板交代了,要賺 20000 元,為了買車買房,加油吧....
員工22號(hào): 在第 1 天賺了31432
員工22號(hào): 終于賺到 31432 元, 可以交差了...
員工21號(hào): 老板交代了,要賺 20000 元,為了買車買房,加油吧....
員工18號(hào): 在第 1 天賺了32005
員工18號(hào): 終于賺到 32005 元, 可以交差了...
員工19號(hào): 老板交代了,要賺 20000 元,為了買車買房,加油吧....
員工23號(hào): 在第 1 天賺了6166
員工21號(hào): 在第 1 天賺了15433
員工19號(hào): 在第 1 天賺了23419
員工19號(hào): 終于賺到 23419 元, 可以交差了...
員工20號(hào): 老板交代了,要賺 20000 元,為了買車買房,加油吧....
員工20號(hào): 在第 1 天賺了10376
員工11號(hào): 在第 1 天賺了11808
員工21號(hào): 在第 2 天賺了31059
員工21號(hào): 終于賺到 46492 元, 可以交差了...
員工8號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我4個(gè)手下去完成吧,每人賺個(gè) 25000.0元應(yīng)該沒問題...
員工26號(hào): 老板交代了,要賺 25000 元,為了買車買房,加油吧....
員工11號(hào): 在第 2 天賺了11902
員工11號(hào): 終于賺到 23710 元, 可以交差了...
員工12號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工23號(hào): 在第 2 天賺了9077
員工20號(hào): 在第 2 天賺了30386
員工20號(hào): 終于賺到 40762 元, 可以交差了...
員工10號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 174110元,趕緊邀功去....
員工7號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我10個(gè)手下去完成吧,每人賺個(gè) 10000.0元應(yīng)該沒問題...
員工30號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工12號(hào): 在第 1 天賺了31271
員工12號(hào): 終于賺到 31271 元, 可以交差了...
員工26號(hào): 在第 1 天賺了11631
員工13號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工26號(hào): 在第 2 天賺了10160
員工30號(hào): 在第 1 天賺了10786
員工30號(hào): 終于賺到 10786 元, 可以交差了...
員工31號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工31號(hào): 在第 1 天賺了15201
員工31號(hào): 終于賺到 15201 元, 可以交差了...
員工32號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工26號(hào): 在第 3 天賺了32642
員工26號(hào): 終于賺到 54433 元, 可以交差了...
員工27號(hào): 老板交代了,要賺 25000 元,為了買車買房,加油吧....
員工23號(hào): 在第 3 天賺了33072
員工23號(hào): 終于賺到 48315 元, 可以交差了...
員工24號(hào): 老板交代了,要賺 33333 元,為了買車買房,加油吧....
員工24號(hào): 在第 1 天賺了26309
員工24號(hào): 在第 2 天賺了15420
員工24號(hào): 終于賺到 41729 元, 可以交差了...
員工25號(hào): 老板交代了,要賺 33333 元,為了買車買房,加油吧....
員工13號(hào): 在第 1 天賺了33266
員工13號(hào): 終于賺到 33266 元, 可以交差了...
員工14號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工25號(hào): 在第 1 天賺了19270
員工25號(hào): 在第 2 天賺了15842
員工25號(hào): 終于賺到 35112 元, 可以交差了...
員工9號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 125156元,趕緊邀功去....
員工6號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我9個(gè)手下去完成吧,每人賺個(gè) 11112.0元應(yīng)該沒問題...
員工40號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工32號(hào): 在第 1 天賺了8133
員工32號(hào): 在第 2 天賺了3518
員工32號(hào): 終于賺到 11651 元, 可以交差了...
員工33號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工27號(hào): 在第 1 天賺了23200
員工14號(hào): 在第 1 天賺了6366
員工27號(hào): 在第 2 天賺了10406
員工27號(hào): 終于賺到 33606 元, 可以交差了...
員工28號(hào): 老板交代了,要賺 25000 元,為了買車買房,加油吧....
員工40號(hào): 在第 1 天賺了28078
員工40號(hào): 終于賺到 28078 元, 可以交差了...
員工41號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工41號(hào): 在第 1 天賺了12996
員工41號(hào): 終于賺到 12996 元, 可以交差了...
員工42號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工33號(hào): 在第 1 天賺了29188
員工33號(hào): 終于賺到 29188 元, 可以交差了...
員工34號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工14號(hào): 在第 2 天賺了17712
員工14號(hào): 終于賺到 24078 元, 可以交差了...
員工15號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工28號(hào): 在第 1 天賺了18623
員工28號(hào): 在第 2 天賺了8205
員工28號(hào): 終于賺到 26828 元, 可以交差了...
員工29號(hào): 老板交代了,要賺 25000 元,為了買車買房,加油吧....
員工34號(hào): 在第 1 天賺了30779
員工34號(hào): 終于賺到 30779 元, 可以交差了...
員工35號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工42號(hào): 在第 1 天賺了26164
員工42號(hào): 終于賺到 26164 元, 可以交差了...
員工43號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工43號(hào): 在第 1 天賺了2995
員工29號(hào): 在第 1 天賺了347
員工15號(hào): 在第 1 天賺了33056
員工15號(hào): 終于賺到 33056 元, 可以交差了...
員工16號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工35號(hào): 在第 1 天賺了3639
員工29號(hào): 在第 2 天賺了22909
員工43號(hào): 在第 2 天賺了2289
員工16號(hào): 在第 1 天賺了27836
員工16號(hào): 終于賺到 27836 元, 可以交差了...
員工17號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工43號(hào): 在第 3 天賺了694
員工17號(hào): 在第 1 天賺了16361
員工17號(hào): 終于賺到 16361 元, 可以交差了...
員工1號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 189578元,趕緊邀功去....
員工2號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我2個(gè)手下去完成吧,每人賺個(gè) 50000.0元應(yīng)該沒問題...
員工49號(hào): 老板交代了,要賺 50000 元,為了買車買房,加油吧....
員工49號(hào): 在第 1 天賺了8599
員工43號(hào): 在第 4 天賺了10008
員工43號(hào): 終于賺到 15986 元, 可以交差了...
員工44號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工29號(hào): 在第 3 天賺了31298
員工29號(hào): 終于賺到 54554 元, 可以交差了...
員工8號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 169421元,趕緊邀功去....
員工39號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工49號(hào): 在第 2 天賺了8099
員工35號(hào): 在第 2 天賺了164
員工49號(hào): 在第 3 天賺了5518
員工49號(hào): 在第 4 天賺了22441
員工44號(hào): 在第 1 天賺了6091
員工39號(hào): 在第 1 天賺了18813
員工39號(hào): 終于賺到 18813 元, 可以交差了...
員工48號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工44號(hào): 在第 2 天賺了22324
員工44號(hào): 終于賺到 28415 元, 可以交差了...
員工45號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工49號(hào): 在第 5 天賺了28438
員工49號(hào): 終于賺到 73095 元, 可以交差了...
員工50號(hào): 老板交代了,要賺 50000 元,為了買車買房,加油吧....
員工35號(hào): 在第 3 天賺了31797
員工35號(hào): 終于賺到 35600 元, 可以交差了...
員工36號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工50號(hào): 在第 1 天賺了18071
員工45號(hào): 在第 1 天賺了22528
員工45號(hào): 終于賺到 22528 元, 可以交差了...
員工46號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工36號(hào): 在第 1 天賺了26828
員工36號(hào): 終于賺到 26828 元, 可以交差了...
員工37號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工50號(hào): 在第 2 天賺了32422
員工50號(hào): 終于賺到 50493 元, 可以交差了...
員工2號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 123588元,趕緊邀功去....
員工3號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我9個(gè)手下去完成吧,每人賺個(gè) 11112.0元應(yīng)該沒問題...
員工51號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工46號(hào): 在第 1 天賺了1537
員工46號(hào): 在第 2 天賺了27529
員工46號(hào): 終于賺到 29066 元, 可以交差了...
員工47號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工48號(hào): 在第 1 天賺了24791
員工48號(hào): 終于賺到 24791 元, 可以交差了...
員工38號(hào): 老板交代了,要賺 10000 元,為了買車買房,加油吧....
員工37號(hào): 在第 1 天賺了17587
員工37號(hào): 終于賺到 17587 元, 可以交差了...
員工47號(hào): 在第 1 天賺了23693
員工47號(hào): 終于賺到 23693 元, 可以交差了...
員工6號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 211717元,趕緊邀功去....
員工5號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我7個(gè)手下去完成吧,每人賺個(gè) 14286.0元應(yīng)該沒問題...
員工60號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工51號(hào): 在第 1 天賺了27189
員工51號(hào): 終于賺到 27189 元, 可以交差了...
員工52號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工38號(hào): 在第 1 天賺了32285
員工38號(hào): 終于賺到 32285 元, 可以交差了...
員工66號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工7號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 228718元,趕緊邀功去....
員工65號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工65號(hào): 在第 1 天賺了26122
員工65號(hào): 終于賺到 26122 元, 可以交差了...
員工64號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工52號(hào): 在第 1 天賺了19239
員工52號(hào): 終于賺到 19239 元, 可以交差了...
員工53號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工60號(hào): 在第 1 天賺了10433
員工66號(hào): 在第 1 天賺了25993
員工66號(hào): 終于賺到 25993 元, 可以交差了...
員工63號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工60號(hào): 在第 2 天賺了19529
員工60號(hào): 終于賺到 29962 元, 可以交差了...
員工61號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工64號(hào): 在第 1 天賺了6894
員工53號(hào): 在第 1 天賺了13114
員工53號(hào): 終于賺到 13114 元, 可以交差了...
員工54號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工54號(hào): 在第 1 天賺了8237
員工61號(hào): 在第 1 天賺了15878
員工61號(hào): 終于賺到 15878 元, 可以交差了...
員工62號(hào): 老板交代了,要賺 14285 元,為了買車買房,加油吧....
員工63號(hào): 在第 1 天賺了32108
員工63號(hào): 終于賺到 32108 元, 可以交差了...
員工4號(hào): 上級(jí)要我賺 100000, 有點(diǎn)小多,沒事讓我9個(gè)手下去完成吧,每人賺個(gè) 11112.0元應(yīng)該沒問題...
員工67號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工64號(hào): 在第 2 天賺了30531
員工64號(hào): 終于賺到 37425 元, 可以交差了...
員工75號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工54號(hào): 在第 2 天賺了13562
員工54號(hào): 終于賺到 21799 元, 可以交差了...
員工55號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工55號(hào): 在第 1 天賺了17774
員工55號(hào): 終于賺到 17774 元, 可以交差了...
員工56號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工67號(hào): 在第 1 天賺了24463
員工67號(hào): 終于賺到 24463 元, 可以交差了...
員工68號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工56號(hào): 在第 1 天賺了1677
員工62號(hào): 在第 1 天賺了14266
員工75號(hào): 在第 1 天賺了26532
員工75號(hào): 終于賺到 26532 元, 可以交差了...
員工74號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工68號(hào): 在第 1 天賺了32639
員工68號(hào): 終于賺到 32639 元, 可以交差了...
員工69號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工69號(hào): 在第 1 天賺了9513
員工56號(hào): 在第 2 天賺了9154
員工56號(hào): 在第 3 天賺了289
員工56號(hào): 終于賺到 11120 元, 可以交差了...
員工57號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工62號(hào): 在第 2 天賺了17321
員工62號(hào): 終于賺到 31587 元, 可以交差了...
員工5號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 199075元,趕緊邀功去....
員工59號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工69號(hào): 在第 2 天賺了17971
員工69號(hào): 終于賺到 27484 元, 可以交差了...
員工70號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工74號(hào): 在第 1 天賺了26270
員工74號(hào): 終于賺到 26270 元, 可以交差了...
員工73號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工70號(hào): 在第 1 天賺了21237
員工70號(hào): 終于賺到 21237 元, 可以交差了...
員工71號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工59號(hào): 在第 1 天賺了4411
員工57號(hào): 在第 1 天賺了3546
員工57號(hào): 在第 2 天賺了29330
員工57號(hào): 終于賺到 32876 元, 可以交差了...
員工58號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工73號(hào): 在第 1 天賺了10674
員工71號(hào): 在第 1 天賺了8821
員工59號(hào): 在第 2 天賺了11887
員工59號(hào): 終于賺到 16298 元, 可以交差了...
員工72號(hào): 老板交代了,要賺 11111 元,為了買車買房,加油吧....
員工58號(hào): 在第 1 天賺了28241
員工58號(hào): 終于賺到 28241 元, 可以交差了...
員工3號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 187650元,趕緊邀功去....
員工72號(hào): 在第 1 天賺了14371
員工72號(hào): 終于賺到 14371 元, 可以交差了...
員工73號(hào): 在第 2 天賺了14918
員工73號(hào): 終于賺到 25592 元, 可以交差了...
員工71號(hào): 在第 2 天賺了28814
員工71號(hào): 終于賺到 37635 元, 可以交差了...
員工4號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 236223元,趕緊邀功去....
員工0號(hào): 嗯,不錯(cuò),效率還可以,終于賺到 1845236元,趕緊邀功去....
1845236
看到?jīng)]有,員工0號(hào)把任務(wù)一百萬直接分給了10個(gè)手下去做,每個(gè)手下有繼續(xù)往下分,最終在七十幾號(hào)人的努力下,終于完成了目標(biāo)--一百萬.而且還超出八十多萬,老板一開心,直接把八十多萬分給這七十多個(gè)員工分紅了.
后記通過上面這個(gè)例子的學(xué)習(xí),相信應(yīng)該很多人都可以掌握ForkJoinPool這個(gè)類,它的核心就是要完成某一個(gè)目標(biāo)任務(wù),如果目標(biāo)任務(wù)太大,那么就創(chuàng)建多個(gè)子任務(wù).然后一直等待這些子任務(wù)完成.最終完成之前定下的目標(biāo)任務(wù).
打賞如果覺得我的文章寫的還過得去的話,有錢就捧個(gè)錢場(chǎng),沒錢給我捧個(gè)人場(chǎng)(幫我點(diǎn)贊或推薦一下)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69968.html
摘要:并不會(huì)為每個(gè)任務(wù)都創(chuàng)建工作線程,而是根據(jù)實(shí)際情況構(gòu)造線程池時(shí)的參數(shù)確定是喚醒已有空閑工作線程,還是新建工作線程。 showImg(https://segmentfault.com/img/bVbiYSP?w=1071&h=707); 本文首發(fā)于一世流云的專欄:https://segmentfault.com/blog... 一、引言 前一章——Fork/Join框架(1) 原理,我們...
摘要:進(jìn)程線程與協(xié)程它們都是并行機(jī)制的解決方案。選擇是任意性的,并在對(duì)實(shí)現(xiàn)做出決定時(shí)發(fā)生。線程池的大小一旦達(dá)到最大值就會(huì)保持不變,如果某個(gè)線程因?yàn)閳?zhí)行異常而結(jié)束,那么線程池會(huì)補(bǔ)充一個(gè)新線程。此線程池支持定時(shí)以及周期性執(zhí)行任務(wù)的需求。 并發(fā)與并行的概念 并發(fā)(Concurrency): 問題域中的概念—— 程序需要被設(shè)計(jì)成能夠處理多個(gè)同時(shí)(或者幾乎同時(shí))發(fā)生的事件 并行(Parallel...
摘要:并發(fā)教程原子變量和原文譯者飛龍協(xié)議歡迎閱讀我的多線程編程系列教程的第三部分。如果你能夠在多線程中同時(shí)且安全地執(zhí)行某個(gè)操作,而不需要關(guān)鍵字或上一章中的鎖,那么這個(gè)操作就是原子的。當(dāng)多線程的更新比讀取更頻繁時(shí),這個(gè)類通常比原子數(shù)值類性能更好。 Java 8 并發(fā)教程:原子變量和 ConcurrentMap 原文:Java 8 Concurrency Tutorial: Synchroni...
摘要:時(shí),標(biāo)準(zhǔn)類庫添加了,作為對(duì)型線程池的實(shí)現(xiàn)。類圖用來專門定義型任務(wù)完成將大任務(wù)分割為小任務(wù)以及合并結(jié)果的工作。 JDK 1.7 時(shí),標(biāo)準(zhǔn)類庫添加了 ForkJoinPool,作為對(duì) Fork/Join 型線程池的實(shí)現(xiàn)。Fork 在英文中有 分叉 的意思,而 Join 有 合并 的意思。ForkJoinPool 的功能也是如此:Fork 將大任務(wù)分叉為多個(gè)小任務(wù),然后讓小任務(wù)執(zhí)行,Join...
摘要:實(shí)際上,在并行流上使用新的方法。此外,我們了解到所有并行流操作共享相同的范圍。因此,您可能希望避免實(shí)施慢速阻塞流操作,因?yàn)檫@可能會(huì)減慢嚴(yán)重依賴并行流的應(yīng)用程序的其他部分。 流可以并行執(zhí)行,以增加大量輸入元素的運(yùn)行時(shí)性能。并行流ForkJoinPool通過靜態(tài)ForkJoinPool.commonPool()方法使用公共可用的流。底層線程池的大小最多使用五個(gè)線程 - 具體取決于可用物理C...
閱讀 857·2021-09-22 16:01
閱讀 2125·2021-08-20 09:37
閱讀 1720·2019-08-30 15:54
閱讀 1718·2019-08-30 15:44
閱讀 869·2019-08-28 18:23
閱讀 3042·2019-08-26 12:17
閱讀 1049·2019-08-26 11:56
閱讀 1564·2019-08-23 16:20