成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試突擊:線程池有哪些狀態(tài)?狀態(tài)是如何轉(zhuǎn)換的?

開(kāi)發(fā) 后端
線程池的狀態(tài)總共有 5 種:RUNNING:運(yùn)行狀態(tài)、SHUTDOWN:關(guān)閉狀態(tài)、STOP:停止?fàn)顟B(tài)、TIDYING:整理狀態(tài)和 TERMINATED:銷毀狀態(tài)。

作者 | 磊哥

來(lái)源 | Java面試真題解析(ID:aimianshi666)

轉(zhuǎn)載請(qǐng)聯(lián)系授權(quán)(微信ID:GG_Stone)

在 Java 中,線程池的狀態(tài)和線程的狀態(tài)是完全不同的,線程有 6 種狀態(tài):NEW:初始化狀態(tài)、RUNNABLE:可運(yùn)行/運(yùn)行狀態(tài)、BLOCKED:阻塞狀態(tài)、WAITING:無(wú)時(shí)限等待狀態(tài)、TIMED_WAITING:有時(shí)限等待狀態(tài)和 TERMINATED:終止?fàn)顟B(tài)。而線程池的狀態(tài)有以下 5 種:

  1. RUNNING:運(yùn)行狀態(tài),線程池創(chuàng)建好之后就會(huì)進(jìn)入此狀態(tài),如果不手動(dòng)調(diào)用關(guān)閉方法,那么線程池在整個(gè)程序運(yùn)行期間都是此狀態(tài)。
  2. SHUTDOWN:關(guān)閉狀態(tài),不再接受新任務(wù)提交,但是會(huì)將已保存在任務(wù)隊(duì)列中的任務(wù)處理完。
  3. STOP:停止?fàn)顟B(tài),不再接受新任務(wù)提交,并且會(huì)中斷當(dāng)前正在執(zhí)行的任務(wù)、放棄任務(wù)隊(duì)列中已有的任務(wù)。
  4. TIDYING:整理狀態(tài),所有的任務(wù)都執(zhí)行完畢后(也包括任務(wù)隊(duì)列中的任務(wù)執(zhí)行完),當(dāng)前線程池中的活動(dòng)線程數(shù)降為 0 時(shí)的狀態(tài)。到此狀態(tài)之后,會(huì)調(diào)用線程池的 terminated() 方法。
  5. TERMINATED:銷毀狀態(tài),當(dāng)執(zhí)行完線程池的 terminated() 方法之后就會(huì)變?yōu)榇藸顟B(tài)。

這 5 種狀態(tài)可以在 ThreadPoolExecutor 源碼中找到,如下圖所示:

線程池狀態(tài)轉(zhuǎn)移

線程池的狀態(tài)轉(zhuǎn)移有兩條路徑:

  • 當(dāng)調(diào)用 shutdown() 方法時(shí),線程池的狀態(tài)會(huì)從 RUNNING 到 SHUTDOWN,再到 TIDYING,最后到 TERMENATED 銷毀狀態(tài)。
  • 當(dāng)調(diào)用 shutdownNow() 方法時(shí),線程池的狀態(tài)會(huì)從 RUNNING 到 STOP,再到 TIDYING,最后到 TERMENATED 銷毀狀態(tài)。

線程狀態(tài)轉(zhuǎn)換的流程如下圖所示:

terminated方法

線程池中的 terminated() 方法,也就是線程池從 TIDYING 轉(zhuǎn)換到 TERMINATED 狀態(tài)時(shí)調(diào)用的方法,默認(rèn)是空的,它的源碼如下:

我們可以在創(chuàng)建線程池的時(shí)候重寫(xiě) terminated() 方法,具體實(shí)現(xiàn)代碼如下:

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ThreadPoolStateTransition {
public static void main(String[] args) throws InterruptedException {
// 創(chuàng)建線程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 10, 0L,
TimeUnit.SECONDS, new LinkedBlockingQueue<>(100)) {
@Override
protected void terminated() {
super.terminated();
System.out.println("執(zhí)行 terminated() 方法");
}
};
// 關(guān)閉線程池
threadPool.shutdown();
// 等待線程池執(zhí)行完再退出
while (!threadPool.awaitTermination(1, TimeUnit.SECONDS)) {
System.out.println("線程池正在運(yùn)行中");
}
}
}

總結(jié)

線程池的狀態(tài)總共有 5 種:RUNNING:運(yùn)行狀態(tài)、SHUTDOWN:關(guān)閉狀態(tài)、STOP:停止?fàn)顟B(tài)、TIDYING:整理狀態(tài)和 TERMINATED:銷毀狀態(tài)。默認(rèn)情況下,如果不調(diào)用關(guān)閉方法,線程池會(huì)一直處于 RUNNING 狀態(tài),而線程池狀態(tài)的轉(zhuǎn)移有兩個(gè)路徑:當(dāng)調(diào)用 shutdown() 方法時(shí),線程池的狀態(tài)會(huì)從 RUNNING 到 SHUTDOWN,再到 TIDYING,最后到 TERMENATED 銷毀狀態(tài);當(dāng)調(diào)用 shutdownNow() 方法時(shí),線程池的狀態(tài)會(huì)從 RUNNING 到 STOP,再到 TIDYING,最后到 TERMENATED 銷毀狀態(tài)。

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

2022-06-01 12:00:54

HTTP狀態(tài)碼服務(wù)端

2022-03-14 07:32:06

線程池拒絕策略自定義

2023-11-29 16:29:09

線程java

2024-11-28 11:07:50

線程JVM操作系統(tǒng)

2022-03-02 07:36:37

池化技術(shù)Java線程池

2022-03-28 08:31:29

線程池定時(shí)任務(wù)

2022-03-07 07:33:16

線程池Java語(yǔ)言

2022-04-18 07:36:37

TimeUnit線程休眠

2022-04-07 07:40:40

線程安全變量

2022-05-11 07:41:55

死鎖運(yùn)算線程

2022-06-06 07:35:26

MySQLInnoDBMyISAM

2022-10-12 14:23:30

Java線程

2022-02-28 07:01:22

線程中斷interrupt

2022-04-06 07:50:28

線程安全代碼

2022-01-24 07:01:20

安全多線程版本

2013-12-09 09:56:30

NAT64IPv6stateful

2022-03-16 07:33:40

守護(hù)線程用戶線程語(yǔ)言

2022-04-13 14:43:05

JVM同步鎖Monitor 監(jiān)視

2022-03-30 08:54:21

線程 Thread判斷線程池任務(wù)Java

2023-08-15 15:33:29

線程池線程數(shù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 日韩电影一区二区三区 | 91精品一区二区 | 做a视频| 97色免费视频 | 国产在线www| 欧美一级黄带 | 亚洲91精品 | 精品国产一区二区三区成人影院 | 56pao在线 | 欧洲一区在线观看 | 成av人电影在线 | 91资源在线 | 国产精品欧美一区二区 | 久久久123 | 成人在线观看免费 | 国产精品久久久久久久久免费相片 | 国产一区欧美一区 | 成人免费视频一区 | www.久久| 看av网址 | 羞视频在线观看 | 黄色日批视频 | 国产九九九 | 日韩精品一区二区三区中文在线 | 在线观看免费av片 | 欧美国产精品一区二区三区 | 国产第一区二区 | 日本不卡一二三 | 精品国产一区二区三区免费 | 亚洲网站在线播放 | 日韩一级免费电影 | 色婷婷综合在线观看 | 亚洲精品国产一区 | 91在线免费视频 | 视频一区二区在线 | 久久av网站 | 久久国产精品精品国产色婷婷 | 免费av播放 | 自拍偷拍亚洲视频 | 精品自拍视频 | 97色免费视频 |