執行緒的生命週期和執行緒的同步

2021-05-28 00:45:50 字數 1795 閱讀 7795

1、         新建狀態。  當建立thread類的乙個例項(物件)時,此執行緒進入新建狀態(未被啟動)。

2、         就緒:執行緒已經被啟動,正在等待被分配給cpu時間片,也就是說此時執行緒正在就緒佇列中排隊等候得到cpu資源

3、執行:執行緒獲得cpu資源正在執行任務(run()方法),此時除非此執行緒自動放棄cpu資源或者有優先順序更高的執行緒進入,執行緒將一直執行到結束。

4、死亡:自然終止:正常執行run()方法後終止

異常終止:呼叫stop()方法讓乙個執行緒終止執行

5、         堵塞

a)      sleep()  將程式睡眠。 當時間到了。恢復到就緒狀態

b)     wait()   呼叫motify()(喚醒執行緒)方法回到就緒狀態

c)      suspend() 被另乙個執行緒所阻塞 resume()方法恢復

6、         執行緒的優先順序

a)      把執行緒從就緒狀態進入執行狀態的過程叫做執行緒排程,負責排程工作的機構叫做排程管理器

b)     優先順序 執行緒的優先順序的取值範圍是1—10

i.             max_priority

ii.             norm_priority

iii.             min_priority

iv.             得到貨修改執行緒的優先順序  final intgetpriority()       final voidsetpriority(int newpriority)

7、         常用方法 run() start() sleep(long t)  sleep(long millis,int nanos) nanos引數為有納秒

a)      yield() 暫停執行緒,讓步的方法  當前執行緒進入就緒狀態,不是堵塞狀態。

b)     join() 方法  讓執行緒加入執行,執行某一線程join方法的執行緒會被凍結,等待某一線程執行結束,該執行緒才會恢復到可執行狀態

c)      wait()   與notify() 方法  是成對。  暫停和恢復

d)     interrupt():  清楚執行緒的凍結狀態  強制清楚

e)      stop()  有風險,終止。已過時 

停止方法: 1。在迴圈設定標誌,判斷用break跳出迴圈

2.執行緒處於堵塞狀態, interrupt()  中斷執行緒interrupted()測試是否中斷。在第一次呼叫已清除了其中斷狀態之,且第二次呼叫檢驗完中斷狀後態前,當前執行緒再次中斷的情況除外,如果連續兩次呼叫該方法,則第二次呼叫將返回 false    isiterrupted() 此時執行緒是否已經中斷,執行緒的中斷狀態不受該方法的影響。

f) isalive()  判斷是否為活動的執行緒。

h) currentthread()   獲取到當前的執行緒物件  然後  t1.getname() 獲得執行緒名字

9、執行緒的同步 synchronization

互斥鎖  標記,這個標記用來保證在任一時刻,只能有以個執行緒訪問該物件  關鍵字  synchronized  用來與物件的互斥鎖聯絡

加鎖方式   synchronized(this){}   在方法宣告中,表示整個方法為同步方法   

publicsynchronized char pop(){} 同步方法只有乙個。

鎖的是物件。

好處  解決了執行緒安全問題

弊端  降低了執行效率

同步巢狀,容易出現死鎖。

解決死鎖  wait() 方法

執行緒的生命週期與執行緒的同步

20110906 執行緒的生命週期和執行緒的同步 1 新建狀態。當建立thread類的乙個例項 物件 時,此執行緒進入新建狀態 未被啟動 2 就緒 執行緒已經被啟動,正在等待被分配給cpu時間片,也就是說此時執行緒正在就緒佇列中排隊等候得到cpu資源 3 執行 執行緒獲得cpu資源正在執行任務 ru...

執行緒的生命週期

1.新建 threadd thread new thread runnable 2.就緒 thread.start 將執行緒放入就緒等待佇列中,等待cpu時間片的分配 3.執行 獲取到cpu時間片,一直執行到結束,除非有優先順序更高執行緒進入或者自動放棄cpu資源 4.死亡 正常結束或被其他執行緒殺...

執行緒的生命週期

如上圖 new乙個thread,則執行緒處於新建狀態。呼叫start 則處於就緒狀態,至於什麼時候執行,屬於系統排程的事情了,當run 或者call 執行體執行完成後,處於死亡狀態。執行狀態的執行緒,可能遇到以下情況而被阻塞 sleep 方法 io阻塞 等待同步鎖 等待通知 suspend 呼叫yi...