精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試必問(wèn):線程池是如何執(zhí)行的?它的拒絕策略有哪些?

開(kāi)發(fā) 前端
線程池的執(zhí)行流程有 3 個(gè)重要的判斷點(diǎn)(判斷順序依次往后):判斷當(dāng)前線程數(shù)和核心線程數(shù)、判斷當(dāng)前任務(wù)隊(duì)列是否已滿(mǎn)、判斷當(dāng)前線程數(shù)是否已達(dá)到最大線程數(shù)。

聊到線程池就一定會(huì)聊到線程池的執(zhí)行流程,也就是當(dāng)有一個(gè)任務(wù)進(jìn)入線程池之后,線程池是如何執(zhí)行的?我們今天就來(lái)聊聊這個(gè)話題。線程池是如何執(zhí)行的?線程池的拒絕策略有哪些?

線程池執(zhí)行流程

想要真正的了解線程池的執(zhí)行流程,就得先從線程池的執(zhí)行方法 execute() 說(shuō)起,execute() 實(shí)現(xiàn)源碼如下:

public void execute(Runnable command) {
    if (command == null)
        throw new NullPointerException();
    int c = ctl.get();
    // 當(dāng)前工作的線程數(shù)小于核心線程數(shù)
    if (workerCountOf(c) < corePoolSize) {
        // 創(chuàng)建新的線程執(zhí)行此任務(wù)
        if (addWorker(command, true))
            return;
        c = ctl.get();
    }
    // 檢查線程池是否處于運(yùn)行狀態(tài),如果是則把任務(wù)添加到隊(duì)列
    if (isRunning(c) && workQueue.offer(command)) {
        int recheck = ctl.get();
        // 再次檢線程池是否處于運(yùn)行狀態(tài),防止在第一次校驗(yàn)通過(guò)后線程池關(guān)閉
        // 如果是非運(yùn)行狀態(tài),則將剛加入隊(duì)列的任務(wù)移除
        if (! isRunning(recheck) && remove(command))
            reject(command);
        // 如果線程池的線程數(shù)為 0 時(shí)(當(dāng) corePoolSize 設(shè)置為 0 時(shí)會(huì)發(fā)生)
        else if (workerCountOf(recheck) == 0)
            addWorker(null, false); // 新建線程執(zhí)行任務(wù)
    }
    // 核心線程都在忙且隊(duì)列都已爆滿(mǎn),嘗試新啟動(dòng)一個(gè)線程執(zhí)行失敗
    else if (!addWorker(command, false)) 
        // 執(zhí)行拒絕策略
        reject(command);
}

從上述源碼我們可以看出,當(dāng)任務(wù)來(lái)了之后,線程池的執(zhí)行流程是:先判斷當(dāng)前線程數(shù)是否大于核心線程數(shù)?如果結(jié)果為 false,則新建線程并執(zhí)行任務(wù);如果結(jié)果為 true,則判斷任務(wù)隊(duì)列是否已滿(mǎn)?如果結(jié)果為 false,則把任務(wù)添加到任務(wù)隊(duì)列中等待線程執(zhí)行,否則則判斷當(dāng)前線程數(shù)量是否超過(guò)最大線程數(shù)?如果結(jié)果為 false,則新建線程執(zhí)行此任務(wù),否則將執(zhí)行線程池的拒絕策略,如下圖所示:

線程池拒絕策略

當(dāng)任務(wù)過(guò)多且線程池的任務(wù)隊(duì)列已滿(mǎn)時(shí),此時(shí)就會(huì)執(zhí)行線程池的拒絕策略,線程池的拒絕策略默認(rèn)有以下 4 種:

  1. AbortPolicy:中止策略,線程池會(huì)拋出異常并中止執(zhí)行此任務(wù)。
  2. CallerRunsPolicy:把任務(wù)交給添加此任務(wù)的(main)線程來(lái)執(zhí)行。
  3. DiscardPolicy:忽略此任務(wù),忽略最新的一個(gè)任務(wù)。
  4. DiscardOldestPolicy:忽略最早的任務(wù),最先加入隊(duì)列的任務(wù)。

默認(rèn)的拒絕策略為 AbortPolicy 中止策略。

DiscardPolicy拒絕策略

接下來(lái)我們以 DiscardPolicy 忽略此任務(wù),忽略最新的一個(gè)任務(wù)為例,演示一下拒絕策略的具體使用,實(shí)現(xiàn)代碼如下:

public static void main(String[] args) {
    // 任務(wù)的具體方法
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("當(dāng)前任務(wù)被執(zhí)行,執(zhí)行時(shí)間:" + new Date() +
                               " 執(zhí)行線程:" + Thread.currentThread().getName());
            try {
                // 等待 1s
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    // 創(chuàng)建線程,線程的任務(wù)隊(duì)列的長(zhǎng)度為 1
    ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1,
                                                           100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1),
                                                           new ThreadPoolExecutor.DiscardPolicy());
    // 添加并執(zhí)行 4 個(gè)任務(wù)
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    // 線程池執(zhí)行完任務(wù),關(guān)閉線程池
    threadPool.shutdown();
}

以上程序的執(zhí)行結(jié)果如下:

從上述執(zhí)行結(jié)果可以看出,給線程池添加了 4 個(gè)任務(wù),而線程池只執(zhí)行了 2 個(gè)任務(wù)就結(jié)束了,其他兩個(gè)任務(wù)執(zhí)行了拒絕策略 DiscardPolicy 被忽略了,這就是拒絕策略的作用。

AbortPolicy拒絕策略

為了和 DiscardPolicy 拒絕策略對(duì)比,我們來(lái)演示一下 JDK 默認(rèn)的拒絕策略 AbortPolicy 中止策略,線程池會(huì)拋出異常并中止執(zhí)行此任務(wù),示例代碼如下:

public static void main(String[] args) {
    // 任務(wù)的具體方法
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("當(dāng)前任務(wù)被執(zhí)行,執(zhí)行時(shí)間:" + new Date() +
                               " 執(zhí)行線程:" + Thread.currentThread().getName());
            try {
                // 等待 1s
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    // 創(chuàng)建線程,線程的任務(wù)隊(duì)列的長(zhǎng)度為 1
    ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1,
                                                           100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1),
                                                           new ThreadPoolExecutor.AbortPolicy()); // 顯式指定拒絕策略,也可以忽略此設(shè)置,它為默認(rèn)拒絕策略
    // 添加并執(zhí)行 4 個(gè)任務(wù)
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    // 線程池執(zhí)行完任務(wù),關(guān)閉線程池
    threadPool.shutdown();
}

以上程序的執(zhí)行結(jié)果如下:

從結(jié)果可以看出,給線程池添加了 4 個(gè)任務(wù),線程池正常執(zhí)行了 2 個(gè)任務(wù),其他兩個(gè)任務(wù)執(zhí)行了中止策略,并拋出了拒絕執(zhí)行的異常 RejectedExecutionException。

自定義拒絕策略

當(dāng)然除了 JDK 提供的四種拒絕策略之外,我們還可以實(shí)現(xiàn)通過(guò) new RejectedExecutionHandler,并重寫(xiě) rejectedExecution 方法來(lái)實(shí)現(xiàn)自定義拒絕策略,實(shí)現(xiàn)代碼如下:

public static void main(String[] args) {
    // 任務(wù)的具體方法
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("當(dāng)前任務(wù)被執(zhí)行,執(zhí)行時(shí)間:" + new Date() +
                               " 執(zhí)行線程:" + Thread.currentThread().getName());
            try {
                // 等待 1s
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    // 創(chuàng)建線程,線程的任務(wù)隊(duì)列的長(zhǎng)度為 1
    ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1,
                                                           100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1),
                                                           new RejectedExecutionHandler() {
                                                               @Override
                                                               public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                                                                   // 執(zhí)行自定義拒絕策略的相關(guān)操作
                                                                   System.out.println("我是自定義拒絕策略~");
                                                               }
                                                           });
    // 添加并執(zhí)行 4 個(gè)任務(wù)
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    threadPool.execute(runnable);
    threadPool.execute(runnable);
}

以上程序的執(zhí)行結(jié)果如下:

小結(jié)

線程池的執(zhí)行流程有 3 個(gè)重要的判斷點(diǎn)(判斷順序依次往后):判斷當(dāng)前線程數(shù)和核心線程數(shù)、判斷當(dāng)前任務(wù)隊(duì)列是否已滿(mǎn)、判斷當(dāng)前線程數(shù)是否已達(dá)到最大線程數(shù)。如果經(jīng)過(guò)以上 3 個(gè)判斷,得到的結(jié)果都會(huì) true,則會(huì)執(zhí)行線程池的拒絕策略。JDK 提供了 4 種拒絕策略,我們還可以通過(guò) new RejectedExecutionHandler 并重寫(xiě) rejectedExecution 方法來(lái)實(shí)現(xiàn)自定義拒絕策略。

責(zé)任編輯:姜華 來(lái)源: Java面試真題解析
相關(guān)推薦

2022-03-14 07:32:06

線程池拒絕策略自定義

2020-02-18 14:25:51

Java線程池拒絕策略

2024-11-11 17:27:45

2024-08-19 09:13:02

2024-06-04 07:38:10

2025-02-11 08:31:37

Java關(guān)鍵字安全

2020-11-25 11:33:47

Java線程技術(shù)

2022-03-23 08:51:21

線程池Java面試題

2021-12-09 12:22:28

MyBatis流程面試

2011-11-14 09:08:06

云計(jì)算數(shù)據(jù)存儲(chǔ)

2023-09-01 15:22:31

負(fù)載均衡服務(wù)器端客戶(hù)端

2021-02-05 12:34:33

線程池系統(tǒng)

2024-01-05 14:20:55

MySQL索引優(yōu)化器

2018-10-24 14:30:30

緩存服務(wù)更新

2021-12-13 11:12:41

Spring事務(wù)失效

2023-02-06 07:01:51

2023-02-03 07:24:49

雙親委派模型

2023-02-15 07:03:41

跨域問(wèn)題面試安全

2024-10-09 15:58:02

2020-07-08 12:05:55

Java線程池策略
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美色图天堂| 国产高中女学生第一次| 激情五月色综合国产精品| 欧美三级乱人伦电影| 国产福利片一区二区| 亚洲精品无遮挡| 日韩专区一卡二卡| 欧美乱大交xxxxx另类电影| 亚洲欧美日本一区| 日韩av黄色| 欧美日韩激情网| 在线播放 亚洲| 亚洲三区在线观看无套内射| 久久爱www久久做| 欧美一级bbbbb性bbbb喷潮片| 欧美一区二区三区观看| 精品深夜福利视频| 欧美女孩性生活视频| 99精品视频在线看| 免费污视频在线观看| 国产欧美日本一区视频| 精品一区日韩成人| 精品国产九九九| 视频一区视频二区在线观看| 久久久久久亚洲| 午夜剧场免费在线观看| 在线一级成人| 日韩av一区在线观看| 手机在线免费毛片| 国产黄色精品| 91成人免费在线| 国产黄页在线观看| av影视在线看| 一区二区三区欧美亚洲| 一区二区在线观看网站| 国产三级在线免费| 91免费精品国自产拍在线不卡| 3d蒂法精品啪啪一区二区免费| 亚洲毛片一区二区三区| 中国女人久久久| 国模精品视频一区二区| 国产精品久久久精品四季影院| 精品免费在线| 国产一级揄自揄精品视频| 成人网站免费观看| 高清日韩欧美| 亚洲成人999| 中国黄色片视频| 一区二区视频| 精品免费视频一区二区| 久草免费资源站| 6080成人| 亚洲精品国产精品久久清纯直播| 久久久久久久久久影视| 国产精品白丝一区二区三区| 精品久久久久久久久久久久久久久久久 | 国产中文字幕在线看| 91啪亚洲精品| 欧美日韩一区二区视频在线| 免费av在线电影| 久久久久国产精品厨房| 色噜噜狠狠色综合网| 国产精品麻豆一区二区三区| 亚洲国产精品高清| 老司机av福利| 亚洲制服国产| 亚洲一区精品在线| 激情伊人五月天| 极品在线视频| 色婷婷av一区二区| 天天色综合天天色| 成人免费观看49www在线观看| 日韩午夜精品视频| 国产情侣久久久久aⅴ免费| 精品综合久久88少妇激情| 亚洲精品国偷自产在线99热| 日韩人妻无码精品综合区| 欧美美乳视频| 欧美成人免费全部| 日本五十熟hd丰满| 久久一区中文字幕| 91亚洲永久免费精品| 亚洲欧美激情另类| 26uuu精品一区二区| 日韩欧美一区二区视频在线播放| gogo在线高清视频| 午夜精品久久久久久久99樱桃| 黑森林福利视频导航| 日本午夜免费一区二区| 亚洲第一视频在线观看| 99久久精品免费视频| 综合久久久久| 日产精品久久久一区二区福利 | 精品国产一区二区精华| 熟女俱乐部一区二区视频在线| 第一会所亚洲原创| 欧美激情精品久久久久久大尺度| 综合网在线观看| 国产又黄又大久久| 欧美日韩在线一二三| 国产精品刘玥久久一区| 午夜国产精品影院在线观看| 久热精品在线观看视频| xxxxxhd亚洲人hd| 在线视频欧美性高潮| 久草网在线观看| 久久中文精品| 国产乱码精品一区二区三区日韩精品 | 大胆国模一区二区三区| 日韩黄色av网站| 一区二区国产精品精华液| 国产精品日韩久久久| 91九色单男在线观看| 性xxxx18| 一区二区三区精品在线观看| 一区二区三区 欧美| 免费日韩一区二区三区| 久久躁狠狠躁夜夜爽| 亚洲欧美日韩激情| 不卡的电视剧免费网站有什么| 亚洲精品日韩成人| av在线中出| 欧美精品少妇一区二区三区| a级大片在线观看| 在线欧美不卡| 91人成网站www| √新版天堂资源在线资源| 一道本成人在线| 国产伦精品一区三区精东| 欧美69wwwcom| 成人免费看片视频| 成人影视在线播放| 91国偷自产一区二区开放时间 | 99免费在线视频| 欧美激情一区二区三区四区| 日本精品一区二区三区四区| h视频久久久| 欧美高跟鞋交xxxxhd| 国产99久一区二区三区a片 | 亚洲欧美日韩国产中文专区| 日韩三级视频在线| 粉嫩蜜臀av国产精品网站| 樱空桃在线播放| 先锋影音网一区二区| 中文字幕亚洲自拍| 日本三级一区二区三区| 国产校园另类小说区| 日韩欧美精品在线观看视频| 久久久久高潮毛片免费全部播放| 欧美国产日韩中文字幕在线| 蜜臀av午夜精品| 亚洲午夜三级在线| 午夜视频在线观看国产| 亚洲国产三级| 蜜桃麻豆91| 九九热线视频只有这里最精品| 国产一区二区三区在线观看网站| 亚洲精品国产无码| 亚洲国产电影在线观看| www.精品在线| 欧美黄污视频| 国产精品久久精品国产| av在线加勒比| 亚洲社区在线观看| 在线观看中文字幕av| 17c精品麻豆一区二区免费| 国产美女视频免费看| 中文字幕一区二区三三| 99精彩视频在线观看免费| 黄色激情在线播放| 亚洲色图美腿丝袜| 91精品中文字幕| 亚洲综合精品自拍| 亚洲av无码成人精品国产| 日韩av一级电影| 黄色网zhan| 久久精品色播| 国产精品普通话| 在线中文字幕-区二区三区四区 | shkd中文字幕久久在线观看| 欧美精品久久久久久久多人混战| 欧美日韩精品在线观看视频 | 日本一区视频在线观看免费| 亚洲国产天堂| 91福利视频在线观看| 毛片在线免费| 欧美一级高清片| 免费看一级视频| 一区二区三区日韩在线观看| 一区二区黄色片| 国产精一品亚洲二区在线视频| 欧美日韩性生活片| 98精品久久久久久久| 国产精品久久7| 国产在视频一区二区三区吞精| 久久久av一区| 青青青草原在线| 欧美精品免费视频| 国产成人无码精品亚洲| 亚洲婷婷综合色高清在线| 熟妇高潮一区二区| 奇米亚洲午夜久久精品| 永久免费看av| 欧美亚洲精品在线| 成人在线资源网址| 成人福利一区二区| 高清欧美性猛交xxxx| porn亚洲| 日韩成人免费视频| 成 人 免费 黄 色| 在线观看一区不卡| 国产亚洲精久久久久久无码77777| 91亚洲精品乱码久久久久久蜜桃| 国产欧美精品一二三| 亚洲一区二区三区免费在线观看| 伊人色综合久久天天五月婷| 欧美aaaaaaaa牛牛影院| 亚洲一区二区三区视频| 日韩免费va| 久久久久久久久爱| 网友自拍视频在线| 一本久久综合亚洲鲁鲁| 人妻偷人精品一区二区三区| 欧美日韩激情一区二区三区| 久久久久久久久久影院| 亚洲国产一区二区a毛片| 人妻互换一区二区激情偷拍| a美女胸又www黄视频久久| 男人的天堂最新网址| 欧美精品99| 亚洲精品在线视频观看| 136福利精品导航| 97久久精品午夜一区二区| 99精品国自产在线| 欧美一级淫片aaaaaaa视频| 97影院秋霞午夜在线观看| 中文字幕日韩免费视频| 国产一级片在线| 日韩成人激情在线| 日韩电影免费| 亚洲精品suv精品一区二区| 国产夫妻自拍av| 欧美日韩一区二区不卡| 一本一道人人妻人人妻αv | 91丨九色丨丰满| 色婷婷综合中文久久一本| 国产极品在线播放| 亚洲伊人伊色伊影伊综合网| 深夜福利影院在线观看| 一区二区三区四区激情| 欧美人与禽zozzo禽性配| 亚洲欧美日韩人成在线播放| 亚洲视频重口味| 综合欧美一区二区三区| 亚洲一区电影在线观看| 国产精品久久久久久亚洲伦 | 国产精品美女久久久久人| 亚洲sss综合天堂久久| 99久久这里有精品| 亚洲tv在线观看| 韩国三级成人在线| 91超碰在线免费观看| 免费一区二区三区在线视频| 97碰碰视频| 美女主播精品视频一二三四| 国产亚洲精品自在久久| 久久97精品| 国产伦精品一区二区三区照片 | 91亚洲国产成人久久精品网站| 精品网站999| 成人在线视频网址| 清纯唯美亚洲经典中文字幕| 日韩片电影在线免费观看| 日韩精品一卡| 国产高清免费在线| 欧美黄色aaaa| 人人妻人人澡人人爽欧美一区双| 亚洲久色影视| 狠狠热免费视频| 久久99热这里只有精品| 亚洲欧美日韩色| 久久综合色天天久久综合图片| 久久精品成人av| 亚洲乱码国产乱码精品精可以看| 国产性生活网站| 欧美日韩亚洲视频一区| 黄色片视频网站| 欧美色综合网站| 精品国产亚洲AV| 日韩精品在线第一页| 国产日产一区二区| 午夜精品久久久久久久久久久久| 中文av在线全新| 91夜夜未满十八勿入爽爽影院 | 精品久久一区二区三区蜜桃| 蜜臀91精品国产高清在线观看| 美女黄色片网站| 99伊人成综合| 欧美女同在线观看| 91网址在线看| 男女性高潮免费网站| 五月激情综合网| 国产在线观看第一页| 日韩av影院在线观看| 久操视频在线观看| 热门国产精品亚洲第一区在线| 91精品国产自产精品男人的天堂| 欧美精品一区在线| 欧美激情成人在线| 欧美丝袜在线观看| 91麻豆国产福利在线观看| 黄色录像一级片| 欧美体内谢she精2性欧美| 中文字幕视频二区| 亚洲国内高清视频| 国产三区视频在线观看| 日韩美女视频免费在线观看| 麻豆国产精品| 欧美午夜精品久久久久久蜜| 精品动漫av| 日本精品一区在线| 国产欧美一区二区三区在线看蜜臀 | 天天综合日日夜夜精品| hs视频在线观看| 伊人成人开心激情综合网| 最新黄网在线观看| 国产区亚洲区欧美区| 黄色欧美在线| 屁屁影院ccyy国产第一页| 久久99精品国产麻豆婷婷| 欧美丰满美乳xxⅹ高潮www| 午夜成人在线视频| 精品黑人一区二区三区国语馆| 久久亚洲综合国产精品99麻豆精品福利 | 欧美激情奇米色| 粉嫩一区二区三区在线观看| 色姑娘综合网| 奇米影视在线99精品| 日本一级免费视频| 色婷婷精品大在线视频 | 久久综合中文字幕| 91蜜桃视频在线观看| 欧美不卡一区二区三区| 日韩另类在线| av资源站久久亚洲| 欧美xxx在线观看| 真实乱偷全部视频| 亚洲精品成a人| 中文字幕人成人乱码亚洲电影| 最近2019中文字幕mv免费看 | 综合久久十次| 国内av一区二区| 《视频一区视频二区| 97超碰人人模人人人爽人人爱| 久久精品视频导航| 国产精品igao视频网网址不卡日韩| 日韩三级电影| 国产一区二区久久| 澳门黄色一级片| 日韩欧美在线影院| 美女av在线免费看| 久久精品国产精品青草色艺 | 久久影院100000精品| 鲁一鲁一鲁一鲁一av| 亚洲国产精品av| 超碰免费在线97| 久久免费视频在线| 日韩av资源网| 国产一二三四在线视频| 国产精品热久久久久夜色精品三区| 波多野结衣一区二区在线 | 日韩精品电影一区二区| 91激情在线视频| 免费网站成人| 高清国产在线一区| 国产亚洲精品久久久久婷婷瑜伽| 在线观看中文av| 欧美日韩在线免费| 成年人在线观看视频| 999国产视频| 国产人成精品一区二区三| 这里只有久久精品| 欧美成人免费网站| 亚洲三级欧美| 一区二区精品国产| jvid福利写真一区二区三区| 亚洲成人av影片| 不卡av电影院| 欧美有码在线| 少妇一级淫免费放| 精品久久久久久久久久国产 | 国产性做久久久久久| 国产又黄又大又爽| 欧美一区二三区| 99久久精品费精品国产| 中国xxxx性xxxx产国| 欧美日韩不卡一区| 俺来也官网欧美久久精品| 日本一区二区在线视频| 国产福利一区二区三区在线视频|