中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何深入理解Java多線程與并發框中線程的狀態

發布時間:2021-11-17 13:49:59 來源:億速云 閱讀:196 作者:柒染 欄目:軟件技術

本篇文章給大家分享的是有關如何深入理解Java多線程與并發框中線程的狀態,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1. 新建狀態(New)

萬事萬物都不是憑空出現的,線程也一樣,它被創建后的狀態稱為 新建 狀態。

比如:

Thread thread = new Thread();

2. 可運行狀態(Runable)

線程被創建后是不能使用的,就是讓用戶在此期間設置一些屬性,

比如:

// 設置類加載器
thread.setContextClassLoader(System.class.getClassLoader());
// 設置線程名稱
thread.setName("商品服務-product-service");
// 是否為守護線程/用戶線程
thread.setDaemon(false);
// 設置線程優先級
thread.setPriority(5);

通過 thread.start() 方法開啟線程,開啟后意味著該線程 “能夠” 運行,并不意味著一定會運行,因為它要搶占資源,獲取CPU的使用權后,才能運行。所以此狀態稱為 可運行狀態。從上圖中可以看出,不僅通過 start() 啟動一個線程后可以進入 Runnable 狀態,還可以通過其他方式到達 Runnable 狀態。

3. 運行狀態(Running)

線程通過努力,獲得了CPU的使用權,就會進入執行程序,此時狀態被稱為 運行狀態。

4. 阻塞狀態(BLOCKED)

多線程搶占CPU資源,同一時刻僅有一個線程進入臨界區,為保證對資源訪問的線程安全,同一時刻僅有一個線程進入 synchronized 同步塊,而其他未獲得訪問權的線程將進入 阻塞狀態 。

  • 等待阻塞:通過調用線程的wait()方法,讓線程等待某工作的完成。

  • 同步阻塞:線程在獲取synchronized同步鎖失敗(因為鎖被其它線程所占用),它會進入同步阻塞狀態。

  • 其他阻塞:通過調用線程的sleep()或join()或發出了I/O請求時,線程會進入到阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。

5. 睡眠狀態 TIMED_WAITING(sleeping)

通過調用對象的wait(time)方法或調用線程的sleep(time)/join(time),等待/睡眠指定的時間,此時該線程會進入TIMED_WAITING(sleeping) 狀態,直接時間已到,會進入Runnable狀態,重新搶占CPU資源。

6. 等待狀態 WAITING

通過調用對象的wait()方法,讓搶占資源的線程等待某工作的完成,或主動join()其他線程,讓當前線程釋放資源等待被join的線程完成工作,而該線程將進入 等待狀態 。

7. 死亡狀態(Dead)

線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

以上就是如何深入理解Java多線程與并發框中線程的狀態,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长阳| 湘阴县| 安新县| 崇左市| 墨江| 油尖旺区| 钟祥市| 郸城县| 中方县| 甘孜| 四川省| 商城县| 抚州市| 昆山市| 金秀| 陇南市| 洪江市| 滦南县| 大理市| 通州区| 嵊州市| 侯马市| 涞源县| 霍城县| 咸阳市| 壤塘县| 玉林市| 高安市| 依兰县| 和静县| 云安县| 霸州市| 普定县| 讷河市| 涟源市| 交城县| 易门县| 林口县| 麻江县| 龙井市| 伊通|