什麼是執行緒阻塞
- 2022-10-28
執行緒A等待執行緒B的資料,執行緒B等待執行緒A的資料,互相等待,就會陷入阻塞,這也是一種執行緒阻塞。
阻塞狀態是正在執行的執行緒遇到某個特殊情況。例如,延遲、掛起、等待I/O操作完成等。 進入阻塞狀態的執行緒讓出CPU,並暫時停止自己的執行。執行緒進入阻塞狀態後,就一直等待,直到引起阻塞的原因被消除,執行緒又轉入就緒狀態,重新進入就緒佇列排隊。
一個執行緒都要從執行到結束都要經過3個階段:
1、正在執行
2、準備結束執行
3、結束執行
可以透過下面這三個方法結束一個執行緒。
1、使用stop()方法強制結束執行緒。
2、使用thread。interrupt()方法傳送中斷。
3、在Thread物件中設定共享變數,透過在run方法中不斷檢測該變數的值來決定是否結束。
阻塞狀態的執行緒的特點是:該執行緒放棄CPU的使用,暫停執行,只有等到導致阻塞的原因消除之後才回復執行。
導致阻塞的原因:
A、執行緒執行了Thread。sleep(int millsecond);方法,當前執行緒放棄CPU,睡眠一段時間,然後再恢復執行
B、執行緒執行一段同步程式碼,但是尚且無法獲得相關的同步鎖,只能進入阻塞狀態,等到獲取了同步鎖,才能回覆執行。
C、執行緒執行了一個物件的wait()方法,直接進入阻塞狀態,等待其他執行緒執行notify()或者notifyAll()方法。
D、執行緒執行某些IO操作,因為等待相關的資源而進入了阻塞狀態。比如說監聽system。in,但是尚且沒有收到鍵盤的輸入,則進入阻塞狀態。