執行緒的同步狀態

2021-08-31 07:16:48 字數 1176 閱讀 4420

執行緒的同步狀態主要包含5種狀態的轉換:

1. 初始狀態(new): 也就是執行緒物件被新建後就進入初始狀態。例如,thread thread = new thread()。

2. 就緒狀態(runnable): 也被稱為「可執行狀態」。執行緒物件被建立後,呼叫該物件的start()方法啟動了執行緒。此時執行緒就進入到了就緒狀態。注意 :並不是執行緒進入到就緒狀態就一定會馬上執行,執行緒具體能否執行完全看cpu的選擇。

3. 執行狀態(running): 執行緒獲取到了cpu使用許可權進行執行。

4. 阻塞狀態(blocked): 阻塞狀態是執行緒因為某種原因放棄cpu使用權,暫時停止執行。阻塞的情況分三種: 

01) 等待狀態 -- 通過呼叫執行緒的wait()方法,讓執行緒等待某工作的完成。

02) 同步阻塞 -- 執行緒獲取同步鎖失敗(因為鎖被其它執行緒所占用),它會進入同步阻塞狀態。

03) 其他阻塞 -- 通過呼叫執行緒的sleep()或join()或發出了i/o請求時,執行緒會進入到阻塞狀態。當sleep()狀態超時、join()等待執行緒終止或者超時、或者i/o處理完畢時,執行緒重新轉入就緒狀態。

注意:執行緒無法從阻塞狀態直接恢復到執行狀態,需要先回到就緒狀態。

5.終止狀態(dead): 執行緒執行完了或者因異常退出了run()方法,該執行緒結束生命週期。

呼叫thread.yield()方法,不會阻塞執行緒,而是讓執行緒直接從執行狀態轉為就緒狀態。但是當前執行緒讓出資源會給優先順序等於或高於當前執行緒的執行緒。因此有可能呼叫了yield後又繼續執行。

因為方法、物件、**塊用了鎖,造成執行緒執行的時候需要先獲取鎖而阻塞

因為執行緒當前占有鎖,但是呼叫了wait(隱式鎖裡呼叫)/await(顯式鎖的condition呼叫)引起釋放了鎖引起阻塞, 需要通過在其他地方呼叫notify(notifyall都是隱式鎖使用)/signal(signalall顯式鎖的condition呼叫)來喚醒執行緒,當時喚醒執行緒過後,執行緒仍然是阻塞的,因為此時執行緒還需要獲取到鎖,當獲取到鎖後,執行緒才由阻塞狀態變化為就緒狀態

同步 執行緒同步

操作執行的先後順序。同步指兩個或兩個以上隨時間變化的量在變化過程中保持一定的相對關係。同步 英語 synchronization 指對在乙個系統中所發生的事件 event 之間進行協調,在時間上出現一致性與統一化的現象。在系統中進行同步,也被稱為及時 in time 同步化的 synchronous...

C 多執行緒基礎(多執行緒的優先順序 狀態 同步)

一 關於多執行緒的優先順序 狀態 同步指令碼如下 using system using system.collections.generic using system.linq using system.text using system.threading using system.threadi...

執行緒的同步

多執行緒共享資料引發的問題 用乙個簡單的例子來說,就是我們經常遇到的過年搶車票的問題,以前人們是去車站排隊,先到先得,現在隨著網際網路的發展,我們可以在網上購票了,現在我們使用多執行緒來模擬搶票過程,每個人機會一樣。關鍵 如下 執行緒不安全的網路搶票 public class site implem...