亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java?線程池狀態(tài)及狀態(tài)轉(zhuǎn)換

 更新時(shí)間:2022年05月10日 09:31:53   作者:??Java中文社群????  
這篇文章主要介紹了java?線程池狀態(tài)及狀態(tài)轉(zhuǎn)換,Java里線程池的狀態(tài)和線程的狀態(tài)是完全不同的,具體有幾種狀態(tài)和哪些不同點(diǎn),下面文章詳細(xì)介紹,需要的小伙伴可以參考一下

前言:

在 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 種:

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

到此這篇關(guān)于java 線程池狀態(tài)及狀態(tài)轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Java線程池狀態(tài)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中快速排序優(yōu)化技巧之隨機(jī)取樣、三數(shù)取中和插入排序

    Java中快速排序優(yōu)化技巧之隨機(jī)取樣、三數(shù)取中和插入排序

    快速排序是一種常用的基于比較的排序算法,下面這篇文章主要給大家介紹了關(guān)于Java中快速排序優(yōu)化技巧之隨機(jī)取樣、三數(shù)取中和插入排序的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • mybatisplus如何在xml的連表查詢中使用queryWrapper

    mybatisplus如何在xml的連表查詢中使用queryWrapper

    這篇文章主要介紹了mybatisplus如何在xml的連表查詢中使用queryWrapper,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • javaweb中靜態(tài)文件的常用處理方法匯總

    javaweb中靜態(tài)文件的常用處理方法匯總

    這篇文章主要介紹了javaweb中靜態(tài)文件的常用處理方法匯總,非常實(shí)用的技巧,需要的朋友可以參考下
    2014-08-08
  • java中的類為什么只能用public修飾?

    java中的類為什么只能用public修飾?

    這篇文章主要介紹了java中的類為什么只能用public修飾,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別

    java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別

    這篇文章主要介紹了java之scan.next()與scan.nextline()函數(shù)的使用及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • JVM堆外內(nèi)存源碼完全解讀分析

    JVM堆外內(nèi)存源碼完全解讀分析

    這篇文章主要為大家介紹了JVM堆外內(nèi)存的核心原理的源碼解讀的完全分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步,早日升職加薪
    2022-01-01
  • 最新評(píng)論