日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

"線程池中線程異常后:銷毀還是復用?"

來源: 責編: 時間:2024-04-02 17:16:51 229觀看
導讀一、一個線程池中的線程異常了,那么線程池會怎么處理這個線程?需要說明,本文的線程池都是java.util.concurrent.ExecutorService線程池,本文將圍繞驗證,閱讀源碼倆方面來解析這個問題。二、代碼驗證2.1 驗證execute提交線

一、一個線程池中的線程異常了,那么線程池會怎么處理這個線程?

需要說明,本文的線程池都是java.util.concurrent.ExecutorService線程池,本文將圍繞驗證,閱讀源碼倆方面來解析這個問題。gLp28資訊網——每日最新資訊28at.com

二、代碼驗證

2.1 驗證execute提交線程池中

2.1.1 測試代碼:

public class ThreadPoolExecutorDeadTest {    public static void main(String[] args) throws InterruptedException {        ExecutorService executorService = buildThreadPoolExecutor();        executorService.execute(() -> exeTask("execute"));        executorService.execute(() -> exeTask("execute"));        executorService.execute(() -> exeTask("execute-exception"));        executorService.execute(() -> exeTask("execute"));        executorService.execute(() -> exeTask("execute"));        Thread.sleep(5000);        System.out.println("再次執行任務=======================");        executorService.execute(() -> exeTask("execute"));        executorService.execute(() -> exeTask("execute"));        executorService.execute(() -> exeTask("execute"));        executorService.execute(() -> exeTask("execute"));        executorService.execute(() -> exeTask("execute"));    }    public static ExecutorService buildThreadPoolExecutor() {        return new ThreadPoolExecutor(5, 10, 30, TimeUnit.SECONDS,                new LinkedBlockingQueue<>(1000), new ThreadFactoryBuilder().setNameFormat("test-%s").build()                , new ThreadPoolExecutor.CallerRunsPolicy());    }    private static void exeTask(String name) {        String printStr = "[thread-name:" + Thread.currentThread().getName() + ",執行方式:" + name + "]";        if ("execute-exception".equals(name)) {            throw new RuntimeException(printStr + ", 我拋異常了");        } else {            System.out.println(printStr);        }    }}

2.1.2 執行結果如下:

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

2.1.3 結論:

execute 提交到線程池的方式,如果執行中拋出異常,并且沒有在執行邏輯中catch,那么會拋出異常,并且移除拋出異常的線程,創建新的線程放入到線程池中。

2.2 驗證submit提交線程池中

2.2.1 測試代碼:

public class ThreadPoolExecutorDeadTest {    public static void main(String[] args) throws InterruptedException {        ExecutorService executorService = buildThreadPoolExecutor();        executorService.submit(() -> exeTask("execute"));        executorService.submit(() -> exeTask("execute"));        executorService.submit(() -> exeTask("execute-exception"));        executorService.submit(() -> exeTask("execute"));        executorService.submit(() -> exeTask("execute"));        Thread.sleep(5000);        System.out.println("再次執行任務=======================");        executorService.submit(() -> exeTask("execute"));        executorService.submit(() -> exeTask("execute"));        executorService.submit(() -> exeTask("execute"));        executorService.submit(() -> exeTask("execute"));        executorService.submit(() -> exeTask("execute"));    }    public static ExecutorService buildThreadPoolExecutor() {        return new ThreadPoolExecutor(5, 10, 30, TimeUnit.SECONDS,                new LinkedBlockingQueue<>(1000), new ThreadFactoryBuilder().setNameFormat("test-%s").build()                , new ThreadPoolExecutor.CallerRunsPolicy());    }    private static void exeTask(String name) {        String printStr = "[thread-name:" + Thread.currentThread().getName() + ",執行方式:" + name + "]";        if ("execute-exception".equals(name)) {            throw new RuntimeException(printStr + ", 我拋異常了");        } else {            System.out.println(printStr);        }    }}

2.2.2 執行結果如下:

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

2.2.3 結論:

submit 提交到線程池的方式,如果執行中拋出異常,并且沒有catch,不會拋出異常,不會創建新的線程。gLp28資訊網——每日最新資訊28at.com

三、源碼解析

3.1java.util.concurrent.AbstractExecutorService#submit(java.lang.Runnable)

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

3.2 查看execute方法的執行邏輯java.util.concurrent.ThreadPoolExecutor#runWorker

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

3.3 java.util.concurrent.ThreadPoolExecutor#processWorkerExit

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

可以發現,如果拋出異常,會移除拋出異常的線程,創建新的線程。

3.4 為什么submit方法,沒有創建新的線程,而是繼續復用原線程?

還記得,我們在3.1的時候,發現submit也是調用了execute方法,但是在調用之前,包裝了一層 RunnableFuture,那一定是在RunnableFuture的實現 FutureTask中有特殊處理了,我們查看源碼可以發現。gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

gLp28資訊網——每日最新資訊28at.com

但是,我們通過java.util.concurrent.FutureTask#get(),就可以獲取對應的異常信息。gLp28資訊網——每日最新資訊28at.com

四、總結

當一個線程池里面的線程異常后:

?當執行方式是execute時,可以看到堆棧異常的輸出,線程池會把這個線程移除掉,并創建一個新的線程放到線程池中。gLp28資訊網——每日最新資訊28at.com

?當執行方式是submit時,堆棧異常沒有輸出。但是調用Future.get()方法時,可以捕獲到異常,不會把這個線程移除掉,也不會創建新的線程放入到線程池中。gLp28資訊網——每日最新資訊28at.com

以上倆種執行方式,都不會影響線程池里面其他線程的正常執行。gLp28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-80828-0.html&quot;線程池中線程異常后:銷毀還是復用?&quot;

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 探索Golang的優雅爬蟲框架 Colly

下一篇: .NET WebAPI 自定義返回類:實現統一與靈活的API響應

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
午夜精品www| 亚洲视频 欧洲视频| 欧美自拍偷拍| 欧美一站二站| 裸体素人女欧美日韩| 欧美日韩国产麻豆| 国产精品一区2区| 一区福利视频| 日韩亚洲精品视频| 欧美一区二区在线| 欧美777四色影视在线| 欧美网站在线观看| 黄色国产精品| 一本色道综合亚洲| 久久久精品日韩| 欧美日韩亚洲系列| 国产一区二区黄| 日韩一级在线观看| 欧美一区三区三区高中清蜜桃 | 久久美女性网| 欧美精品一区二区视频| 国产日韩欧美亚洲一区| 亚洲乱码精品一二三四区日韩在线| 亚洲男人影院| 欧美ab在线视频| 国产女精品视频网站免费| 亚洲日本成人| 欧美在线网站| 欧美日韩综合不卡| ●精品国产综合乱码久久久久| 亚洲一区bb| 免费在线成人av| 国产亚洲一区二区三区在线播放| 一区二区欧美日韩视频| 久久综合电影| 国产乱码精品一区二区三区五月婷 | 欧美人在线视频| 国产一区二区三区的电影| 亚洲精品日韩在线| 久久天天躁夜夜躁狠狠躁2022| 国产精品成人一区二区网站软件| 亚洲福利视频网站| 欧美在线视频在线播放完整版免费观看| 欧美久久久久久| 精品av久久707| 午夜精品久久久久久久蜜桃app | 国产精品xvideos88| 亚洲高清免费视频| 久久精品欧美| 国产麻豆成人精品| 亚洲色图自拍| 欧美精品久久99| 亚洲高清av| 久久久999精品视频| 国产精品久久国产精品99gif| 亚洲黄一区二区三区| 久久久久久久久久久一区| 国产精品一区二区久久久久| 夜夜精品视频| 欧美精品免费播放| 亚洲精品资源| 美国十次成人| 狠狠色狠狠色综合日日91app| 亚久久调教视频| 国产精品久久久久久久久| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩国产亚洲一区| 亚洲国产高潮在线观看| 久久日韩精品| 一区二区在线观看av| 久久久久久婷| 狠狠狠色丁香婷婷综合久久五月| 午夜精品影院在线观看| 国产精品久久久久久久久久妞妞| 一区二区高清| 欧美日韩一区二区三区四区五区| 亚洲靠逼com| 欧美日韩国产va另类| 亚洲精品午夜| 欧美精品九九| 99riav1国产精品视频| 欧美区二区三区| aa国产精品| 欧美视频在线一区| 亚洲小视频在线| 国产精品免费电影| 亚洲欧美日本日韩| 国产日韩欧美综合精品| 久久久99爱| 永久域名在线精品| 男人天堂欧美日韩| 亚洲精品综合| 欧美调教视频| 欧美一二三区精品| 国产综合色在线视频区| 久久免费视频网站| 亚洲精品1区2区| 欧美日韩18| 亚洲女人天堂成人av在线| 国产日本欧美在线观看| 久久精品亚洲精品| 亚洲国产精品一区二区尤物区 | 国产伦精品一区二区三区视频孕妇 | 免费在线成人| 亚洲精品九九| 欧美亚一区二区| 欧美影院视频| 亚洲国产精品va在线看黑人动漫 | 亚洲国产影院| 欧美日韩国产色视频| 亚洲欧美www| 国产亚洲精品久久飘花| 另类av导航| 一区二区三区高清不卡| 国产精品系列在线播放| 久久精品日产第一区二区三区| 在线成人激情黄色| 欧美日韩一区二区三区| 欧美一区精品| 91久久国产综合久久91精品网站| 欧美色精品天天在线观看视频| 欧美专区在线| 亚洲国产精品久久91精品| 欧美视频日韩视频| 久久精品在线播放| 日韩亚洲精品视频| 鲁大师成人一区二区三区| 中文在线资源观看网站视频免费不卡| 国产精品99久久不卡二区| 久久成人亚洲| 免费观看成人网| 久热成人在线视频| 欧美成人中文字幕| 欧美日韩精品一区二区三区四区| 久久伊人亚洲| 欧美日韩视频一区二区三区| 国产亚洲精品久久久久婷婷瑜伽| 亚洲无线观看| 欧美视频在线免费| 亚洲一区中文| 久久婷婷一区| 红桃视频国产一区| 亚洲女女女同性video| 欧美激情精品久久久久久大尺度| 国产自产精品| 亚洲一区二区精品视频| 亚洲视频综合| 亚洲欧美日韩国产中文| 亚洲全部视频| 欧美一区三区三区高中清蜜桃 | 久久精品一本| 国产一区二区在线观看免费播放 | 欧美揉bbbbb揉bbbbb| 亚洲欧美综合精品久久成人 | 久久只有精品| 午夜精品网站| 欧美精品一二三| 在线观看一区| 欧美日韩一区二区三区免费| 99ri日韩精品视频| 欧美成人一区二区三区在线观看| 亚洲精品黄色| 国产毛片久久| 亚洲欧美日韩精品久久亚洲区| 欧美午夜a级限制福利片| 亚洲人成在线观看一区二区| 午夜精品理论片| 欧美日本簧片| 久久不见久久见免费视频1| 亚洲精品韩国| 亚洲高清资源| 国产精品尤物| 欧美日韩久久不卡| 欧美本精品男人aⅴ天堂| 亚洲欧美日韩精品久久亚洲区| 亚洲国产精品一区在线观看不卡| 国产精品综合不卡av| 欧美三级第一页| 久久免费视频在线观看| 亚洲欧洲日韩在线| 欧美日韩综合视频网址| 你懂的国产精品永久在线| 久久精品国产亚洲a| 欧美一区二区高清| 午夜精品福利一区二区蜜股av| 亚洲手机视频| 亚洲视频免费在线| 在线亚洲精品福利网址导航| 日韩午夜av在线| 亚洲精品一二区| 亚洲精品久久久久| 91久久久亚洲精品| 亚洲高清视频的网址| 在线日韩av| 亚洲国产精品国自产拍av秋霞| 在线日韩视频| 亚洲二区在线| 亚洲国产精品成人综合| 亚洲国产精品尤物yw在线观看| 在线欧美日韩| 亚洲精品社区| 99精品视频免费观看| 一区二区三区精品国产| 一本色道久久综合亚洲精品按摩|