国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java 優(yōu)雅關(guān)閉線程池的方案

瀏覽:66日期:2022-08-20 16:04:43

我們經(jīng)常在項(xiàng)目中使用的線程池,但是是否關(guān)心過(guò)線程池的關(guān)閉呢,可能很多時(shí)候直接再項(xiàng)目中直接創(chuàng)建線程池讓它一直運(yùn)行當(dāng)任務(wù)執(zhí)行結(jié)束不在需要了也不去關(guān)閉,這其實(shí)是存在非常大的風(fēng)險(xiǎn)的,大量的線程常駐在后臺(tái)對(duì)系統(tǒng)資源的占用是巨大的 ,甚至引發(fā)異常。所以在我們平時(shí)使用線程池時(shí)需要注意優(yōu)雅的關(guān)閉,這樣可以保證資源的管控。

在 Java 中和關(guān)閉線程池相關(guān)的方法主要有如下:

void shutdown() List<Runnable> shutDownNow boolean awaitTermination boolean isShutDown boolean isTerminated

對(duì)于這些方法有著不同的使用和作用,下面我們真的會(huì)這些不同的方法做詳細(xì)的介紹。

ShutDown

shutDown 方法從字面意思我們可以看到是停止關(guān)閉的意思,我們先來(lái)看下面的一段代碼,首先我們通過(guò) ThreadPoolExecutor 來(lái)創(chuàng)建一個(gè)容量是10的無(wú)界線程池,與 FixedThreadPool 類(lèi)似的,這里手動(dòng)創(chuàng)建可以更好地理解線程池的創(chuàng)建。在后我們提交一千個(gè)任務(wù)執(zhí)行,再執(zhí)行 shutdown 方法進(jìn)行暫停。

public static void main(String[] args) throws InterruptedException { ExecutorService service = new ThreadPoolExecutor(10,10,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>()); for (int i = 0; i < 1000; i++) { service.submit(() ->{try { TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) { System.out.println('接受中斷,不處理~~');}System.out.println('args = ' + Arrays.deepToString(args)+ Thread.currentThread().getName()); }); } service.shutdown(); } 我們可以看到結(jié)果所以線程會(huì)正常執(zhí)行結(jié)束后再關(guān)閉線程池,對(duì)于 ShutDown 而言它可以安全的停止一個(gè)線程池,它有幾個(gè)關(guān)鍵點(diǎn) ShutDown 會(huì)首先將線程設(shè)置成 SHUTDOWN 狀態(tài),然后中斷所有沒(méi)有正在運(yùn)行的線程 正在執(zhí)行的線程和已經(jīng)在隊(duì)列中的線程并不會(huì)被中斷,說(shuō)白了就是使用shutDown 方法其實(shí)就是要等待所有任務(wù)正常全部結(jié)束以后才會(huì)關(guān)閉線程池 調(diào)用 shutdown() 方法后如果還有新的任務(wù)被提交,線程池則會(huì)根據(jù)拒絕策略直接拒絕后續(xù)新提交的任務(wù)。

ShutDownNow

這個(gè)方法與上面方法相比較,直觀就是 now ,即立即停止任務(wù),同樣是上述案列,略作修改如下,

public static void main(String[] args) throws InterruptedException { ExecutorService service = new ThreadPoolExecutor(10,10,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(1000)); for (int i = 0; i < 1000; i++) { service.submit(() ->{try { TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) { System.out.println('接受中斷,結(jié)束線程~~'); //這里響應(yīng)中斷 return;}System.out.println('args = ' + Arrays.deepToString(args)+ Thread.currentThread().getName()); }); } final List<Runnable> runnables = service.shutdownNow(); System.out.println(runnables); } 執(zhí)行上述代碼我們發(fā)現(xiàn),當(dāng)執(zhí)行shutDownNow 方法后,會(huì)像全部正在運(yùn)行的隊(duì)列通知中斷,正在運(yùn)行的線程接收到中斷信號(hào)后選擇處理,而在隊(duì)列中的全部取消執(zhí)行轉(zhuǎn)移到一個(gè)list隊(duì)列中返回,如上述 List<Runnable> runnables ,這里記錄了所有終止的線程

awaitTermination

這個(gè)方法并不是用來(lái)關(guān)閉線程池的,首先我們看一下這個(gè)方法的定義:

boolean awaitTermination_(long timeout, TimeUnit unit)_

可以看到這個(gè)方法有兩個(gè)參數(shù),timeout 表示等待的時(shí)間,unit 時(shí)間單位 這個(gè)方法的作用是,調(diào)用后等待timeout時(shí)間后,反饋線程池的狀態(tài), 等待期間(包括進(jìn)入等待狀態(tài)之前)線程池已關(guān)閉并且所有已提交的任務(wù)(包括正在執(zhí)行的和隊(duì)列中等待的)都執(zhí)行完畢,相當(dāng)于線程池已經(jīng)“終結(jié)”了,方法便會(huì)返回 true; 等待超時(shí)時(shí)間到后,第一種線程池“終結(jié)”的情況始終未發(fā)生,方法返回 false; 等待期間線程被中斷,方法會(huì)拋出 InterruptedException 異常。 上面代碼可以修改來(lái)測(cè)試,這里不再粘貼代碼

isShutDown

isShutDown 方法正如名字,判斷線程池是否停止,返回的是 Boolean 類(lèi)型,如果已經(jīng)開(kāi)始停止線程池則返回 true 否則放回false 當(dāng)調(diào)用了shutDown 或shutDownNow 時(shí)之后,會(huì)返回 true 不過(guò)需要注意,這時(shí)候只是代表線程池關(guān)閉流程的開(kāi)始,并不是說(shuō)線程池已經(jīng)停止了

isTerminated

這個(gè)方法與上面的方法的區(qū)別就是這是正真檢測(cè)線程池是否真的終結(jié)了 這不僅代表線程池已關(guān)閉,同時(shí)代表線程池中的所有任務(wù)都已經(jīng)都執(zhí)行完畢了,因?yàn)樵谡{(diào)用 shutdown方法之后,線程池會(huì)繼續(xù)執(zhí)行里面未完成的任務(wù),包括正在執(zhí)行的任務(wù)和在任務(wù)隊(duì)列中等待的任務(wù)。 如果調(diào)用了 shutdown 方法,但是有一個(gè)線程依然在執(zhí)行任務(wù),那么此時(shí)調(diào)用 isShutdown方法返回的是 true,而調(diào)用 isTerminated方法返回的便是 false,因?yàn)榫€程池中還有任務(wù)正在在被執(zhí)行,線程池并沒(méi)有真正“終結(jié)”。 直到所有任務(wù)都執(zhí)行完畢了,調(diào)用 isTerminated()方法才會(huì)返回 true,這表示線程池已關(guān)閉并且線程池內(nèi)部是空的,所有剩余的任務(wù)都執(zhí)行完畢了。

作者:AnonyStar

原文鏈接:https://www.cnblogs.com/i-code/p/14024845.html

以上就是java 優(yōu)雅關(guān)閉線程池的方案的詳細(xì)內(nèi)容,更多關(guān)于Java 關(guān)閉線程池的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 波多野结衣一区在线观看 | 国产精品久久久久网站 | 中文字幕在线欧美 | 在线看欧美成人中文字幕视频 | 久久99久久99精品免观看 | 国产一区二区三区日韩 | 成人看片在线观看免费 | 欧美成人免费夜夜黄啪啪 | 国产三级毛片视频 | 国产呦系列呦交 | 日本精品久久久久中文字幕 1 | 男女免费观看在线爽爽爽视频 | 欧美一级专区免费大片俄罗斯 | 性欧美欧美之巨大69 | 91在线永久 | 国产国产人免费人成成免视频 | 精品久久久久国产免费 | 高清不卡日本v在线二区 | 韩国美女一区二区 | 亚洲欧美卡通成人制服动漫 | 久久99精品久久久久久秒播放器 | 亚洲欧美精品一区天堂久久 | 黄色网址视频在线观看 | a级国产乱理伦片在线观看 a级国产乱理伦片在线观看99 | 亚洲成a人v大片在线观看 | 亚洲激情黄色 | www.成人| 日日狠狠久久偷偷四色综合免费 | 99精品视频99 | 国产一级在线现免费观看 | 成 人 免费 网站 | 中文字幕巨乱亚洲 | 精品九九久久 | 草草影院永久在线观看 | 国产三级在线播放线 | 美女一级片 | 就草草在线观看视频 | 国产三级香港三韩国三级 | 婷婷在线成人免费观看搜索 | 日本三级香港三级人妇99 | 久草免费新视频 |