新建狀態:當使用關鍵字new建立乙個執行緒物件的時候,該執行緒就處於新建狀態,跟其他物件一樣,讓jvm為其分配記憶體,初始化變數。沒有任何的執行緒特徵,不會執行執行緒體。
就緒狀態:當執行緒物件呼叫start方法的時候,該執行緒就處於就緒狀態了。jvm會為其建立方法呼叫棧和程式計算器,但不會立刻執行run方法,只是表示他可以執行,至於何時開始執行,取決於jvm裡的執行緒排程器的排程。
注意:啟動執行緒的正確方法是呼叫thread的start(),而不是直接呼叫run(),否則就變成單執行緒程式了。呼叫了執行緒的run方法之後,執行緒已經不在處於新建狀態了,不要再次呼叫執行緒物件的start()方法了。只能對處於新建狀態的執行緒呼叫start(),否則引發illegalthreadstateexception。
如果處於就緒狀態的執行緒獲得了cpu,那麼執行緒就開始執行run()方法的執行緒體,這時執行緒處於執行狀態。為此,我們不能再次呼叫start(),不然會丟擲異常的。
當乙個執行緒開始執行後,不可能一直處於執行狀態。執行緒需要被中斷,以便讓其他執行緒可以得到執行的機會。
進入阻塞狀態的幾種情形:
1. 執行緒呼叫sleep()方法表示主動放棄所占有的的cpu資源。
2. 執行緒呼叫了乙個阻塞式io方法,在方法返回之前,執行緒被阻塞。
3. 執行緒試圖獲取乙個同步監視器,但是該物件正被其它的執行緒所占用。
4. 執行緒正等待通知(notify)
當正在執行的執行緒被被阻塞後,其它執行緒就有機會獲得執行。如果執行緒的阻塞被解除了,執行緒會重新進入就緒狀態而不是執行狀態。看上面的圖就一目了然了。然後等待執行緒排程器的排程。
從圖可以看出執行狀態除了可以轉換為阻塞狀態外,還可以進入就緒狀態。執行緒進入就緒狀態的條件是執行緒失去cpu資源或執行緒呼叫yield()方法。
執行緒死亡有三種方式:
1. 執行緒的run()或call()執行完成,執行緒正常結束。
2. 執行緒丟擲乙個未知的異常或錯誤
3. 直接呼叫執行緒的stop()方法——該方法容易導致死鎖,通常不推薦使用。
注意:對於已經死亡的執行緒,不能再次呼叫start()方法。
Java執行緒的生命週期
具體的狀態如下所示 以上有如下幾個方法 suspend 暫時掛起執行緒。resume 恢復掛起的執行緒。stop 停止執行緒。因為以上的三個方法都會產生死鎖的問題,所以現在已經不建議使用了。如果現在假設要想停止乙個執行緒的執行如何去做呢?通過設定標誌位,讓執行緒停止執行。class mythread...
java的執行緒生命週期
定義了乙個列舉型別,thread.state,主要是來闡述乙個執行緒在生命週期的各個階段的狀態。new 執行緒被例項化,但並未.start runnable 執行緒正在執行 blocked 執行緒中止執行,因為在等待獲得乙個鎖,以便進入宣告為synchronized的方法或者 塊 wating 執行...
JAVA 多執行緒 生命週期
1 新建 當乙個執行緒ticktthread1 thread1 new ticktthread1 視窗1 ticket 被new 出來的時候。執行緒就是乙個新建的狀態。2 就緒狀態 當呼叫了start 方法之後。進入就緒狀態。就緒狀態是什麼狀態 某乙個時刻cpu 只能處理乙個執行緒的事物。把時間片分...