欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java concurrency線程池之線程池原理(三)_動力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年06月15日 15:02:19   作者:skywang12345  
這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理第三篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

線程有5種狀態(tài):新建狀態(tài),就緒狀態(tài),運(yùn)行狀態(tài),阻塞狀態(tài),死亡狀態(tài)。線程池也有5種狀態(tài);然而,線程池不同于線程,線程池的5種狀態(tài)是:Running, SHUTDOWN, STOP, TIDYING, TERMINATED。

線程池狀態(tài)定義代碼如下:

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
private static final int COUNT_BITS = Integer.SIZE - 3;
private static final int CAPACITY = (1 << COUNT_BITS) - 1;

private static final int RUNNING = -1 << COUNT_BITS;
private static final int SHUTDOWN = 0 << COUNT_BITS;
private static final int STOP = 1 << COUNT_BITS;
private static final int TIDYING = 2 << COUNT_BITS;
private static final int TERMINATED = 3 << COUNT_BITS;
private static int ctlOf(int rs, int wc) { return rs | wc; }

說明:

ctl是一個(gè)AtomicInteger類型的原子對象。ctl記錄了"線程池中的任務(wù)數(shù)量"和"線程池狀態(tài)"2個(gè)信息。
ctl共包括32位。其中,高3位表示"線程池狀態(tài)",低29位表示"線程池中的任務(wù)數(shù)量"。

RUNNING    -- 對應(yīng)的高3位值是111。
SHUTDOWN   -- 對應(yīng)的高3位值是000。
STOP       -- 對應(yīng)的高3位值是001。
TIDYING    -- 對應(yīng)的高3位值是010。
TERMINATED -- 對應(yīng)的高3位值是011。 

線程池各個(gè)狀態(tài)之間的切換如下圖所示:

1. RUNNING

(01) 狀態(tài)說明:線程池處在RUNNING狀態(tài)時(shí),能夠接收新任務(wù),以及對已添加的任務(wù)進(jìn)行處理。
(02) 狀態(tài)切換:線程池的初始化狀態(tài)是RUNNING。換句話說,線程池被一旦被創(chuàng)建,就處于RUNNING狀態(tài)!
道理很簡單,在ctl的初始化代碼中(如下),就將它初始化為RUNNING狀態(tài),并且"任務(wù)數(shù)量"初始化為0。

private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));

 2. SHUTDOWN

(01) 狀態(tài)說明:線程池處在SHUTDOWN狀態(tài)時(shí),不接收新任務(wù),但能處理已添加的任務(wù)。
(02) 狀態(tài)切換:調(diào)用線程池的shutdown()接口時(shí),線程池由RUNNING -> SHUTDOWN。

 3. STOP

(01) 狀態(tài)說明:線程池處在STOP狀態(tài)時(shí),不接收新任務(wù),不處理已添加的任務(wù),并且會中斷正在處理的任務(wù)。
(02) 狀態(tài)切換:調(diào)用線程池的shutdownNow()接口時(shí),線程池由(RUNNING or SHUTDOWN ) -> STOP。

 4. TIDYING

(01) 狀態(tài)說明:當(dāng)所有的任務(wù)已終止,ctl記錄的"任務(wù)數(shù)量"為0,線程池會變?yōu)門IDYING狀態(tài)。當(dāng)線程池變?yōu)門IDYING狀態(tài)時(shí),會執(zhí)行鉤子函數(shù)terminated()。terminated()在ThreadPoolExecutor類中是空的,若用戶想在線程池變?yōu)門IDYING時(shí),進(jìn)行相應(yīng)的處理;可以通過重載terminated()函數(shù)來實(shí)現(xiàn)。
(02) 狀態(tài)切換:當(dāng)線程池在SHUTDOWN狀態(tài)下,阻塞隊(duì)列為空并且線程池中執(zhí)行的任務(wù)也為空時(shí),就會由 SHUTDOWN -> TIDYING。
當(dāng)線程池在STOP狀態(tài)下,線程池中執(zhí)行的任務(wù)為空時(shí),就會由STOP -> TIDYING。

 5. TERMINATED

(01) 狀態(tài)說明:線程池徹底終止,就變成TERMINATED狀態(tài)。
(02) 狀態(tài)切換:線程池處在TIDYING狀態(tài)時(shí),執(zhí)行完terminated()之后,就會由 TIDYING -> TERMINATED。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java類加載器ClassLoader源碼層面分析講解

    Java類加載器ClassLoader源碼層面分析講解

    ClassLoader翻譯過來就是類加載器,普通的java開發(fā)者其實(shí)用到的不多,但對于某些框架開發(fā)者來說卻非常常見。理解ClassLoader的加載機(jī)制,也有利于我們編寫出更高效的代碼。ClassLoader的具體作用就是將class文件加載到j(luò)vm虛擬機(jī)中去,程序就可以正確運(yùn)行了
    2022-09-09
  • SpringMVC框架REST架構(gòu)體系原理分析

    SpringMVC框架REST架構(gòu)體系原理分析

    REST:Representational State Transfer,資源表現(xiàn)層狀態(tài)轉(zhuǎn)換,是目前&#12112;較主流的&#12032;種互聯(lián)網(wǎng)軟件架構(gòu),它結(jié)構(gòu)清晰、標(biāo)準(zhǔn)規(guī)范、易于理解、便于擴(kuò)展
    2021-09-09
  • SpringBoot的服務(wù)注冊與發(fā)現(xiàn)示例

    SpringBoot的服務(wù)注冊與發(fā)現(xiàn)示例

    本篇文章主要介紹了SpringBoot的服務(wù)注冊與發(fā)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java中的?stop?the?world是什么呢

    Java中的?stop?the?world是什么呢

    這篇文章主要介紹了Java中的stop?the?world是什么呢,從字面上講,就是停止這個(gè)世界,看到這個(gè)字眼,就覺得這是可怕的事情,那到底什么是stop-the-world,本文給大家詳細(xì)講解,感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • Springboot中實(shí)現(xiàn)接口冪等性的4種方案小結(jié)

    Springboot中實(shí)現(xiàn)接口冪等性的4種方案小結(jié)

    本文主要介紹了Springboot中實(shí)現(xiàn)接口冪等性,包含數(shù)據(jù)庫的冪等,數(shù)據(jù)庫的冪等,Redis的冪等性和Token + 時(shí)間戳的冪等性,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Springboot如何使用.yml配置端口號

    Springboot如何使用.yml配置端口號

    這篇文章主要介紹了Springboot如何使用.yml配置端口號問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 手把手帶你分析SpringBoot自動裝配完成了Ribbon哪些核心操作

    手把手帶你分析SpringBoot自動裝配完成了Ribbon哪些核心操作

    這篇文章主要介紹了詳解Spring Boot自動裝配Ribbon哪些核心操作的哪些操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Mybatis使用update更新值為null時(shí)不生效問題解決

    Mybatis使用update更新值為null時(shí)不生效問題解決

    這篇文章主要介紹了Mybatis使用update更新值為null時(shí)不生效問題解決,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java基于elasticsearch實(shí)現(xiàn)集群管理

    Java基于elasticsearch實(shí)現(xiàn)集群管理

    這篇文章主要介紹了java基于elasticsearch實(shí)現(xiàn)集群管理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 引入SpringCloud-gateway報(bào)錯(cuò)的解決方案

    引入SpringCloud-gateway報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了引入SpringCloud-gateway報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論