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

面試突擊:線程池有哪些狀態?狀態是如何轉換的?

開發 后端
線程池的狀態總共有 5 種:RUNNING:運行狀態、SHUTDOWN:關閉狀態、STOP:停止狀態、TIDYING:整理狀態和 TERMINATED:銷毀狀態。

作者 | 磊哥

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

轉載請聯系授權(微信ID:GG_Stone)

在 Java 中,線程池的狀態和線程的狀態是完全不同的,線程有 6 種狀態:NEW:初始化狀態、RUNNABLE:可運行/運行狀態、BLOCKED:阻塞狀態、WAITING:無時限等待狀態、TIMED_WAITING:有時限等待狀態和 TERMINATED:終止狀態。而線程池的狀態有以下 5 種:

  1. RUNNING:運行狀態,線程池創建好之后就會進入此狀態,如果不手動調用關閉方法,那么線程池在整個程序運行期間都是此狀態。
  2. SHUTDOWN:關閉狀態,不再接受新任務提交,但是會將已保存在任務隊列中的任務處理完。
  3. STOP:停止狀態,不再接受新任務提交,并且會中斷當前正在執行的任務、放棄任務隊列中已有的任務。
  4. TIDYING:整理狀態,所有的任務都執行完畢后(也包括任務隊列中的任務執行完),當前線程池中的活動線程數降為 0 時的狀態。到此狀態之后,會調用線程池的 terminated() 方法。
  5. TERMINATED:銷毀狀態,當執行完線程池的 terminated() 方法之后就會變為此狀態。

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

線程池狀態轉移

線程池的狀態轉移有兩條路徑:

  • 當調用 shutdown() 方法時,線程池的狀態會從 RUNNING 到 SHUTDOWN,再到 TIDYING,最后到 TERMENATED 銷毀狀態。
  • 當調用 shutdownNow() 方法時,線程池的狀態會從 RUNNING 到 STOP,再到 TIDYING,最后到 TERMENATED 銷毀狀態。

線程狀態轉換的流程如下圖所示:

terminated方法

線程池中的 terminated() 方法,也就是線程池從 TIDYING 轉換到 TERMINATED 狀態時調用的方法,默認是空的,它的源碼如下:

我們可以在創建線程池的時候重寫 terminated() 方法,具體實現代碼如下:

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 {
// 創建線程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 10, 0L,
TimeUnit.SECONDS, new LinkedBlockingQueue<>(100)) {
@Override
protected void terminated() {
super.terminated();
System.out.println("執行 terminated() 方法");
}
};
// 關閉線程池
threadPool.shutdown();
// 等待線程池執行完再退出
while (!threadPool.awaitTermination(1, TimeUnit.SECONDS)) {
System.out.println("線程池正在運行中");
}
}
}

總結

線程池的狀態總共有 5 種:RUNNING:運行狀態、SHUTDOWN:關閉狀態、STOP:停止狀態、TIDYING:整理狀態和 TERMINATED:銷毀狀態。默認情況下,如果不調用關閉方法,線程池會一直處于 RUNNING 狀態,而線程池狀態的轉移有兩個路徑:當調用 shutdown() 方法時,線程池的狀態會從 RUNNING 到 SHUTDOWN,再到 TIDYING,最后到 TERMENATED 銷毀狀態;當調用 shutdownNow() 方法時,線程池的狀態會從 RUNNING 到 STOP,再到 TIDYING,最后到 TERMENATED 銷毀狀態。

責任編輯:姜華 來源: Java面試真題解析
相關推薦

2022-06-01 12:00:54

HTTP狀態碼服務端

2022-03-14 07:32:06

線程池拒絕策略自定義

2023-11-29 16:29:09

線程java

2024-11-28 11:07:50

線程JVM操作系統

2022-03-02 07:36:37

池化技術Java線程池

2022-03-07 07:33:16

線程池Java語言

2022-03-28 08:31:29

線程池定時任務

2022-04-07 07:40:40

線程安全變量

2022-05-11 07:41:55

死鎖運算線程

2022-04-18 07:36:37

TimeUnit線程休眠

2022-10-12 14:23:30

Java線程

2022-06-06 07:35:26

MySQLInnoDBMyISAM

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

守護線程用戶線程語言

2022-04-13 14:43:05

JVM同步鎖Monitor 監視

2022-03-30 08:54:21

線程 Thread判斷線程池任務Java

2023-08-15 15:33:29

線程池線程數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91久久精品国产 | 中文字幕视频在线观看 | 欧美视频在线播放 | 欧美影院久久 | 成年人在线视频 | 亚洲欧美视频一区二区 | 日韩另类视频 | 久草免费在线视频 | 天堂色综合 | 精品无码久久久久久国产 | 狠狠色香婷婷久久亚洲精品 | 成人精品系列 | 国产精品国产三级国产aⅴ中文 | 成在线人视频免费视频 | 国产精品久久久久久中文字 | 在线看一区二区三区 | 九色一区 | 国产精品久久久久久久久久免费看 | 国产精品日韩在线观看 | 亚洲欧美日本在线 | 在线看黄免费 | 亚洲福利片 | 国产成人精品久久二区二区91 | 日韩精品1区2区3区 成人黄页在线观看 | 一区二区三区四区在线免费观看 | 亚洲成av人片在线观看无码 | 99国产精品视频免费观看一公开 | 看片91 | 国产精品无 | 亚洲欧美综合 | www成人啪啪18| 久久久国产精品一区 | 国产一区 | 日韩欧美操 | 久久久久久久久久一区二区 | 日韩一区二区三区视频 | 午夜欧美 | 亚洲狠狠| 亚洲国产福利视频 | 91香蕉| 一区二区三区视频 |