大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) javase基礎(chǔ)入門教程之線程池的幾種應(yīng)用場(chǎng)景

javase基礎(chǔ)入門教程之線程池的幾種應(yīng)用場(chǎng)景

更新時(shí)間:2020-07-17 16:12:41 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3008次

線程是程序開發(fā)的基礎(chǔ),在平時(shí)的開發(fā)中也是必不可少的,特別是對(duì)多線程和線程池都會(huì)經(jīng)常運(yùn)用到。今天給大家介紹java中幾種常用的線程池,并了解每一種線程池的應(yīng)用場(chǎng)景。

線程使用的demo

public?static?void?cache()?{
????????ExecutorService?pool?=?Executors.newCachedThreadPool();
????????long?start?=?System.currentTimeMillis();
????????pool.execute(()?->?{
????????????int?sum?=?0;
????????????for?(int?i?=?0;?i?<?10;?i++)?{
????????????????sum?=?(int)?Math.sqrt(i?*?i?-?1?+?i);
????????????????System.out.println(sum);
????????????}
????????});
????????System.out.println("cache:?"?+?(System.currentTimeMillis()?-?start));
????}

newCachedThreadPool

重用之前的線程

適合執(zhí)行許多短期異步任務(wù)的程序。

調(diào)用execute()將重用以前構(gòu)造的線程

如果沒有可用的線程,則創(chuàng)建一個(gè)新線程并添加到池中

默認(rèn)為60s未使用就被終止和移除

長期閑置的池將會(huì)不消耗任何資源

源碼:

public?static?ExecutorService?newCachedThreadPool()?{
????????return?new?ThreadPoolExecutor(0,?Integer.MAX_VALUE,
??????????????????????????????????????60L,?TimeUnit.SECONDS,
??????????????????????????????????????new?SynchronousQueue());
????}

通過源碼可以看出底層調(diào)用的是ThreadPoolExecutor方法,傳入一個(gè)同步的阻塞隊(duì)列實(shí)現(xiàn)緩存。

下面說一下ThreadPoolExecutor

public?ThreadPoolExecutor(int?corePoolSize,
??????????????????????????????int?maximumPoolSize,
??????????????????????????????long?keepAliveTime,
??????????????????????????????TimeUnit?unit,
??????????????????????????????BlockingQueue?workQueue)?{
????????this(corePoolSize,?maximumPoolSize,?keepAliveTime,?unit,?workQueue,
?????????????Executors.defaultThreadFactory(),?defaultHandler);
????}

通過源碼可以看出,我們可以傳入線程池的核心線程數(shù)(最小線程數(shù)),最大線程數(shù)量,保持時(shí)間,時(shí)間單位,阻塞隊(duì)列這些參數(shù),最大線程數(shù)設(shè)置為jvm可用的cpu數(shù)量為最佳實(shí)踐

newWorkStealingPool

獲取當(dāng)前可用的線程數(shù)量進(jìn)行創(chuàng)建作為并行級(jí)別

使用ForkJoinPool

源碼:

public?static?ExecutorService?newWorkStealingPool()?{
????????return?new?ForkJoinPool
????????????(Runtime.getRuntime().availableProcessors(),
?????????????ForkJoinPool.defaultForkJoinWorkerThreadFactory,
?????????????null,?true);
????}

通過源碼可以看出底層調(diào)用的是ForkJoinPool線程池

下面說一下ForkJoinPool

public?ForkJoinPool(int?parallelism,
????????????????????????ForkJoinWorkerThreadFactory?factory,
????????????????????????UncaughtExceptionHandler?handler,
????????????????????????boolean?asyncMode)?{
????????this(checkParallelism(parallelism),
?????????????checkFactory(factory),
?????????????handler,
?????????????asyncMode???FIFO_QUEUE?:?LIFO_QUEUE,
?????????????"ForkJoinPool-"?+?nextPoolId()?+?"-worker-");
????????checkPermission();
????}

使用一個(gè)無限隊(duì)列來保存需要執(zhí)行的任務(wù),可以傳入線程的數(shù)量,不傳入,則默認(rèn)使用當(dāng)前計(jì)算機(jī)中可用的cpu數(shù)量,使用分治法來解決問題,使用fork()和join()來進(jìn)行調(diào)用。

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“javase基礎(chǔ)入門教程之線程池的幾種應(yīng)用場(chǎng)景”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产一国产一级毛片视频 | 国产精品美女www爽爽爽视频 | 日韩不卡在线观看 | 四虎影视永久在线观看 | 国产热热 | 99久久精品国内 | 亚洲综合久久综合激情久久 | 视频国产精品 | 97国产在线观看 | 国产欧美久久一区二区 | 国产精品爱久久久久久久 | 奇米影视第四色首页 | 精品久久久久久久久久久久久久久 | 特黄特色一级aa毛片免费观看 | 亚洲视频456 | 手机国产日韩高清免费看片 | 免费香蕉依人在线视频久 | 欧美婷婷| 91不卡在线精品国产 | 久久影院视频 | 成年人福利网站 | 尹人视频在线观看 | 九九影院理论片私人影院 | 一区二区三区在线观看视频 | 97在线免费| 麻豆首页| 亚洲综合国产一区在线 | 日韩国产成人精品视频 | 亚洲精品日韩一区二区 | 久久视频免费在线观看 | 成人网在线免费观看 | 中文字幕在线免费观看视频 | 综合婷婷丁香 | 国产精品久久久影院 | 久久久窝窝午夜精品 | 一本久道综合久久精品 | 亚洲一区在线视频观看 | 日本高清毛片视频在线看 | 日日夜夜操操操 | 大毛片a大毛片 | 成人免费视频一区二区三区 |