執行緒的狀態和生命週期

2021-08-28 10:02:29 字數 1048 閱讀 7724

(1)新建狀態(create):建立乙個執行緒類的物件後,產生的新執行緒就進入新建狀態。

如:thread  myth=new mythread();

(2) 可執行狀態(runable):也叫就緒狀態,呼叫start()方法後進入。

(3) 執行狀態(running):當處於就緒狀態的執行緒被呼叫並獲得了cpu等執行必須的資源時,就進入了執行狀態。

myth.run();

(4) 掛起狀態(blocked):也叫堵塞狀態,當下面的四種情況·之一出現時就會進入:

呼叫了sleep()方法

呼叫了wait()方法。

如果執行緒中使用synchronized來請求物件的鎖未獲得時。

如果執行緒中有輸入輸出操作。

如果乙個執行緒進入了掛起狀態,就無法進入就緒佇列。這時,通常需要由某些事件才能喚醒,具體由什麼喚醒取決於掛起的原因。

(5) 停止狀態(dead):執行緒已經退出執行狀態,並且不再進入就緒狀態。產生這種現象的原因可能是執行緒已經執行完畢,或者被另乙個程序強行殺死。

執行緒的基本控制

(1)終止執行緒

執行緒run()方法執行完畢後,會自然終止。

也可通過呼叫stop()方法來終止執行緒。

(2)測試執行緒狀態

可以通過isalive()方法來來獲取執行緒是否處於活動狀態。start()後,終止前,都屬於活動狀態。

(3)執行緒的暫停與恢復

sleep()方法:將執行緒停止若干毫秒。

join()方法:當前執行緒等待呼叫該方法的執行緒結束後,再恢復執行。

執行緒的排程和優先順序

設定執行緒優先順序的格式為:

執行緒名.setpriority(i);

其中,i的取值為1~10,10為最大優先順序。

thread類有三個優先順序靜態常量:

max_priority:最大優先順序,10。

min_priority:最小優先順序,1。

norm_priority:普通優先順序,5。

執行緒的生命週期狀態

第一步 新建狀態 使用new關鍵字新建執行緒,此時處於新建狀態 第二步 就緒狀態 當呼叫了該執行緒的start 方法,執行緒啟動,處於就緒狀態,但是不一定執行 第三步 執行狀態 需要考作業系統cup的排程執行,如果作業系統是搶占式排程,當執行緒搶占到了cup的執行許可權,執行緒開始執行 如果是分時排...

執行緒生命週期及狀態

示例2 多執行緒執行狀態切換示例 public class demo2 system.out.println 沒呼叫start方法,thread1當前狀態 thread1.getstate tostring thread1.start thread.sleep 2000l 等待thread1執行結束...

執行緒Thread的生命週期以及狀態

由於早上沒有網,所以幾篇寫好的部落格就一起發啦。執行緒的生命週期以及狀態的圖大體上如下 其實 從這個圖中已經大體上能夠的獲取到執行緒的生命週期以及狀態了,但是還是詳細的說下吧 首先是通過new thread 方法例項化乙個新執行緒,然後改執行緒的物件呼叫start 方法,此時執行緒轉入到就緒狀態並且...