11.3-全棧Java筆記:線程的生命周期
一個線程對象在它的生命周期內,需要經歷5個狀態。
新生狀態(New)
用new關鍵字建立一個線程對象後,該線程對象就處於新生狀態。處於新生狀態的線程有自己的內存空間,通過調用start方法進入就緒狀態。
就緒狀態(Runnable)
處於就緒狀態的線程已經具備了運行條件,但還沒有分配到CPU,處於 “線程就緒隊列”,等待系統為其分配CPU。 就緒狀態並不是執行狀態,當系統選定一個等待執行的Thread對象後,它就會進入執行狀態。 一旦獲得CPU,線程就進入運行狀態並自動調用自己的run方法。有4中原因會導致線程進入就緒狀態:
1. 新建線程,調用start()方法,進入就緒狀態
2. 阻塞線程,阻塞解除,進入就緒狀態。
3. 運行線程,調用yield()方法,直接進入就緒狀態。
4. 運行線程,JVM將CPU資源從本線程切換到其他線程。
運行狀態(Running)
在運行狀態的線程執行自己的run方法中代碼,直到調用其他方法而終止、或等待某資源而阻塞或完成任務而死亡。如果在給定的時間片內沒有執行結束,就會被系統給換下來回到就緒狀態。也可能由於某些“導致阻塞的事件”而進入阻塞狀態。
阻塞狀態(Blocked)
阻塞指的是暫停一個線程的執行以等待某個條件發生(如某資源就緒)。
有4種原因會導致阻塞:
1.執行sleep(int millsecond)方法,使當前線程休眠,進入阻塞狀態。當指定的時間到了後,線程進入就緒狀態。
2.執行
3.線程運行時,某個操作進入阻塞狀態,比如執行IO流操作(read()/write()方法本身就是阻塞的方法)。只有當引起該操作阻塞的原因消失後,線程進入就緒狀態。
4.join()線程聯合: 當某個線程等待另一個線程執行結束後,才繼續執行時,使用join方法。使調用該方法的線程在此之前執行完畢,也就是等待調用該方法的線程執行完畢後再往下繼續執行。
死亡狀態(Teminiated)
死亡狀態是線程生命周期中的最後一個階段。線程死亡的原因有兩個。一個是正常運行的線程完成了它run()方法的全部工作; 另一個是線程被強制性地終止,如通過執行
當一個線程進入死亡狀態以後,就不能再回到其它狀態了。
「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。
筆記包含從淺入深的六大部分:
A-Java入門階段
B-數據庫從入門到精通
C-手刃移動前端和Web前端
D-J2EE從了解到實戰
E-Java高級框架精解
F-Linux和Hadoop
本文出自 “12931675” 博客,請務必保留此出處http://12941675.blog.51cto.com/12931675/1945759
11.3-全棧Java筆記:線程的生命周期