多執行緒二
阿新 • • 發佈:2022-05-28
1.volatile
不能保證多執行緒修改同一個變數的時候帶來的不一致性問題。也就是不能代替 synchroned.
-
保證執行緒可見:
利用硬體MESI ,cup的快取一致性來保障執行緒可見。
-
禁止指令重排序:
也是和cup 有關係,現代cup 在編譯(comper)的時候回進行指令重排序, 由cup 元語 loadfence 元語 forefence 元語等。
-
-
-
DCL 單例模式 mrg06.java
-
-
1.餓漢模式1 補充程式碼
2. double Check LOCk 懶漢模式 要加鎖。雙重判斷null,不然要有執行緒安全問題 程式碼
分析一下jvm T t = new T() 的實現過程,1 申請記憶體,2 初始化值 3.賦值 這三個過程會被重排序。如果執行132 的話在執行到 13 的 時候另一個執行緒來了。就會出現 t!=null .而直接返回 沒有初始化的 t 因此產生錯誤。 及其高併發的時候才會出現, j加上 volatile 就不會重排 序。
2.synchroned (object o)
鎖定某個物件 o 時,o 的物件的屬性發生變化的時候依然可以鎖住。但是o的物件發生變化。則鎖定物件也發生變化了。所以避免將鎖定物件的引用變化其 他的物件 (引入final 關鍵字)。
3.CAS(無鎖優化 自旋 樂觀鎖)
所有帶有 AtomicXXX的類都是用 CAS 來實現的。
4.ABA 問題
加 version 解決。
如果是引用型別會有 你和前男友複合的時候,前男友經歷過多少男人未知
如果是基本型別 無所謂
5.unSafe 類
可以直接操作 jvm 的記憶體。