關於系統重排序對多執行緒的影響案例復現

2022-09-17 09:09:07 字數 717 閱讀 9099

最近一直在看《j**a 併發程式設計的藝術》這本書,有一說一,書是真的不錯。

但是在 p29 講到重排序對多執行緒的影響這個小結時,例項**邏輯上確實說的過去,但是我在 idea 一直無法復現,沒有重排序的現象出現。一切以事實說話,到底在多執行緒中有沒有重排序?或者直接說作業系統裡面有沒有對指令重排序。於是我找到了乙個多執行緒新的案例這是原位址

public class threadreordertest 

public static void main(string args) ).start();

new thread(() ->

if (tmpc == 2 && tmpb == 0)

if (tmpc == 2 && tmpa == 0)

}).start();

}system.out.println("done");}}

執行了大概十幾次,終於出現了重排結果:hey wtf!! c == 2 && b == 0

如果沒有重排,按照兩個執行緒的順序,不會出現任何 hey wtf!! 字樣的列印結果。說明發生了如下圖的重排

什麼是GIL?GIL對多執行緒的影響

詳解 gil全稱global interpreter lock 全域性直譯器鎖 gil和python語言沒有任何關係,只是因為歷史原因導致在官方推薦的直譯器cpython中遺留的問題。多執行緒 每個執行緒在執行的過程中都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行 但是當遇到io阻塞會自動的...

關於對多執行緒的認識總結

學習執行緒後覺得不是那麼好理解,特別是對多執行緒的理解。賣票程式 運用執行緒的知識建立乙個實現火車站賣火車票的類,注意在該類中不能出現多次賣同一張票,或者某一張票沒賣的情況。現在我們來理解這個題目,假設有100張票,賣一張少一張,大致的可以這樣理解 if 票數大於零 第一行 單執行緒我們就不說了,不...

GIL對多執行緒的影響一看就明白

gil全稱global interpreter lock 全域性直譯器鎖 gil和python語言沒有任何關係,只是因為歷史原因導致在官方推薦的直譯器cpython中遺留的問題。多執行緒 每個執行緒在執行的過程中都需要先獲取gil,保證同一時刻只有乙個執行緒可以執行 但是當遇到io阻塞會自動的釋放g...