1. 程式人生 > >11.3-全棧Java筆記:線程的生命周期

11.3-全棧Java筆記:線程的生命周期

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.執行

wait()方法,使當前線程進入阻塞狀態。當使用nofity()方法喚醒這個線程後,它進入就緒狀態。

3.線程運行時,某個操作進入阻塞狀態,比如執行IO流操作(read()/write()方法本身就是阻塞的方法)。只有當引起該操作阻塞的原因消失後,線程進入就緒狀態。

4.join()線程聯合: 當某個線程等待另一個線程執行結束後,才繼續執行時,使用join方法。使調用該方法的線程在此之前執行完畢,也就是等待調用該方法的線程執行完畢後再往下繼續執行。

死亡狀態(Teminiated)

死亡狀態是線程生命周期中的最後一個階段。線程死亡的原因有兩個。一個是正常運行的線程完成了它run()方法的全部工作; 另一個是線程被強制性地終止,如通過執行

stopdestroy方法來終止一個線程。(stop()/destroy()方法已經被JDK廢棄,不推薦使用)

當一個線程進入死亡狀態以後,就不能再回到其它狀態了。




「全棧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筆記:線程的生命周期