摘要:線程的狀態參考資料參考虛擬機一書的內容,進行總結。一線程的種狀態新建使用創建一個線程之后。啟動一個線程,該線程會進入等待隊列等待的執行,因此可以細分為和狀態。結束當線程的方法執行結束后,該線程就結束了。
線程的狀態
參考資料:https://www.cnblogs.com/happy...
參考JVM虛擬機一書的內容,進行總結。
關于線程的理解,我們將一個線程看成是一個任務task,這樣應該更好理解。
每一個線程就是一個任務,我們要執行一個任務,這個任務如果完成了,那么我們的程序功能就得到了實現。因為只有一個CPU,也就是說只有一個干活的人。那么我們開始了那么多的任務,CPU就需要頻繁地切換任務來執行,這樣我們就能更好地理解任務的一些狀態了。
無限等待
對于無線等待的任務,第一種情況。
假設有任務A和任務B,我們在任務B的執行代碼中:A.join(); ,這表示把任務B放在任務A的后面執行,那么任務B只有等待任務A做完之后才可以繼續執行(準確地說是進入運行狀態)。也就是說我們無法確定任務B等待的時間,這取決于任務A,所以這叫做無限等待。
對于無限等待的任務,第二種情況。
假設有任務C和任務D,我們在任務C的執行代碼中:Object.wait() ,這表示把任務C擱置,讓它無限等待下去。任務C什么時候可以繼續執行呢?只有當其他任務調用了notify() 、notifyAll() 方法之后,這表示CPU將去看看那些無限等待的任務(特指使用了wait() 方法而等待的任務),然后把它們喚醒(這些任務又進入了運行狀態)。這種情況下,我們無法確定任務C等待的時間,這取決于notify() 和notifyAll() 方法的通知,這就是無限等待的第二種情況。
一、線程的5種狀態新建(New) :使用new Thread() 創建一個線程之后。
運行(Runnable) :使用Thread.start() 方法之后。啟動一個線程,該線程會進入等待隊列等待CPU的執行,因此可以細分為runnable和running狀態。
無限等待(waiting) :處于這種狀態的線程,不會被分配CPU執行時間,需要等待其他線程顯式地喚醒,然后進入運行狀態。
調用Thread.join() 方法。將會一直等待上一個線程的執行結束,然后被上一個線程喚醒。
調用Object.wait() 方法。將會一直等待,直到其他線程中使用了notify()、notifyAll()進行喚醒。
有限等待(timed waiting) :處于這種狀態的線程,不會被分配CPU執行時間,既可以被其他線程顯式地喚醒,也可以在一定時間后由系統自動喚醒,然后進入運行狀態。
調用Thread.sleep(timeout) 方法。該方法不會釋放持有的對象鎖。
調用Object.wait(timeout) 方法。該方法會釋放持有的鎖。
調用Thread.join(timeout) 方法。
阻塞(blocked) :阻塞和等待的區別在于,阻塞是在等待獲取一個排它鎖,因為該線程獲取不到鎖所以被阻塞住而不能允許;而等待則是等待一段時間或者是等待被喚醒,等待狀態并不是等待獲取鎖。這個狀態有個特點,一個線程請求鎖,得到之后該線程進入阻塞狀態;而其他線程再來請求鎖,由于得不到而阻塞;當該鎖釋放后,被阻塞的線程得到鎖就進入了運行狀態。
由synchronized 修飾的代碼塊、方法。使得線程之間有并行變成串行執行。
IO操作,也是串行執行。
結束(terminated) :當線程的run() 方法執行結束后,該線程就結束了。
圖示:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71692.html
摘要:在領域,實現并發程序的主要手段就是多線程。可運行狀態指的是線程可以分配執行。當等待的事件出現了,線程就會從休眠狀態轉換到可運行狀態。導出線程棧,分析線程狀態是診斷并發問題的一個重要工具。 在 Java 領域,實現并發程序的主要手段就是多線程。線程是操作系統里的一個概念,雖然各種不同的開發語言如 Java、C# 等都對其進行了封裝,但原理和思路都是相同都。Java 語言里的線程本質上就是...
摘要:死亡狀態線程退出有可能是正常執行完成也有可能遇見異常退出。類有新建與死亡狀態返回其余狀態返回判斷線程是否存活。線程因某些原因進入阻塞狀態。執行同步代碼塊的過程中執行了當前線程放棄開始睡眠進入就緒狀態但是不會釋放鎖。 【java內存模型簡介 JVM中存在一個主存區(Main Memory或Java Heap Memory),Java中所有變量都是存在主存中的,對于所有線程進行共享,而每個...
摘要:時間年月日星期六說明本文部分內容均來自慕課網。慕課網教學源碼無學習源碼第一章課前準備前言課程說明比較和這兩種線程創建的方式,需要知道和的基本創建方式。一旦主線程獲取到了用戶的輸入,這時候,阻塞就會解除掉,主線程繼續運行,直到結束。 時間:2017年07月08日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://g...
摘要:線程的生命周期線程的生命周期大致可以分為下面五種狀態新建狀態就緒狀態運行狀態休眠狀態終止狀態新建狀態,是線程被創建且未啟動的狀態這里的創建,僅僅是在的這種編程語言層面被創建,而在操作系統層面,真正的線程還沒有被創建。 概要 目前CPU的運算速度已經達到了百億次每秒,甚至更高的量級,家用電腦即使維持操作系統正常運行的進程也會有數十個,線程更是數以百計。 線程是CPU的調度和分派的基本單位...
摘要:沒有提供一種安全直接的方法來停止某個線程,但是提供了中斷機制。中斷的原理中斷機制是一種協作機制,也就是說通過中斷并不能直接終止另一個線程,而需要被中斷的線程自己處理中斷。線程的中斷狀態由該方法清除。測試線程是否已經中斷。 1. 引言 當我們點擊某個殺毒軟件的取消按鈕來停止查殺病毒時,當我們在控制臺敲入quit命令以結束某個后臺服務時……都需要通過一個線程去取消另一個線程正在執行的任務...
閱讀 1847·2021-11-25 09:43
閱讀 3688·2021-11-24 10:32
閱讀 1076·2021-10-13 09:39
閱讀 2328·2021-09-10 11:24
閱讀 3344·2021-07-25 21:37
閱讀 3465·2019-08-30 15:56
閱讀 858·2019-08-30 15:44
閱讀 1449·2019-08-30 13:18