JUC個人學習筆記15 Volatile

2021-10-09 11:16:13 字數 1175 閱讀 1834

根據b站up主狂神說juc課程所寫的個人學習筆記

1.保證可見性

public class jmmdemo

}).start();

timeunit.seconds.sleep(1);

num = 1;

system.out.println(num);}}

2.不保證原子性

原子性:不可分割

執行緒a在執行任務的時候,不能被打擾的,也不能被分割,要麼同時成功,要麼同時失敗。

//volatile不保證原子性

public class vdemo

public static void main(string args)

}).start();

}while(thread.activecount()>2)

system.out.println(thread.currentthread().getname()+" "+num);}}

如果不加lock和synchronized怎麼樣保證原子性

使用原子類解決

public class vdemo 

public static void main(string args)

}).start();

}while(thread.activecount()>2)

system.out.println(thread.currentthread().getname()+" "+num);}}

這些類的底層直接和作業系統掛鉤,在記憶體中修改值,unsafe類是乙個很特殊的存在

指令重排

什麼是指令重排:你寫的程式,計算機並不是按照你寫的那樣去執行的

源**--->編譯器優化的重排--->指令並行也可能會重排--->記憶體系統也會重排--->執行

處理器在指令重排的時候會考慮資料間的依賴性

可能造成的影響的結果:abxy預設都是0

執行緒a執行緒b

x=ay=b

b=1a=2

正常結果x=0,y=0,但是可能指令重排導致詭異的結果x=2,y=1

volatile可以避免指令重排:

記憶體屏障 cpu指令 作用:

1.保證特定的操作順序

2.可以保證某些變數的記憶體可見性(利用這些特性,volatile實現了可見性)

JUC個人學習筆記7 讀寫鎖

根據b站up主狂神說juc課程所寫的個人學習筆記 讀的時候可以多執行緒讀,寫的時候只能乙個寫 獨佔鎖 寫鎖 共享鎖 讀鎖 1.讀 讀 可以共存2.讀 寫 不能共存3.寫 寫 不能共存 public class readwritelockdemo string.valueof i start 讀取 f...

JUC個人學習筆記17 CAS

什麼是cas cas是英文單詞compare and swap的縮寫,翻譯過來就是比較並替換。更新乙個變數的時候,只有當變數的預期值a和記憶體位址v當中的實際值相同時,才會將記憶體位址v對應的值修改為b。public class casdemo atomicinteger.compareandset...

JUC個人學習筆記16 單例模式

根據b站up主狂神說juc課程所寫的個人學習筆記 餓漢式,懶漢式 餓漢式public class hungry private final static hungry hungry new hungry 保證唯一 public static hungry getinstance dcl懶漢式 懶漢式...