根據b站up主狂神說juc課程所寫的個人學習筆記
1.保證可見性2.不保證原子性public class jmmdemo
}).start();
timeunit.seconds.sleep(1);
num = 1;
system.out.println(num);}}
原子性:不可分割
執行緒a在執行任務的時候,不能被打擾的,也不能被分割,要麼同時成功,要麼同時失敗。
//volatile不保證原子性如果不加lock和synchronized怎麼樣保證原子性public class vdemo
public static void main(string args)
}).start();
}while(thread.activecount()>2)
system.out.println(thread.currentthread().getname()+" "+num);}}
使用原子類解決
public class vdemo這些類的底層直接和作業系統掛鉤,在記憶體中修改值,unsafe類是乙個很特殊的存在public static void main(string args)
}).start();
}while(thread.activecount()>2)
system.out.println(thread.currentthread().getname()+" "+num);}}
指令重排
什麼是指令重排:你寫的程式,計算機並不是按照你寫的那樣去執行的
源**--->編譯器優化的重排--->指令並行也可能會重排--->記憶體系統也會重排--->執行
處理器在指令重排的時候會考慮資料間的依賴性
可能造成的影響的結果: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懶漢式 懶漢式...