併發及併發的執行緒安全處理
阿新 • • 發佈:2018-12-13
目錄
- 原子性
提供了互斥訪問,同一時刻只有一個執行緒可以來對它操作
原子包:具有原子性,執行緒安全的,
atomicInt:
原始碼實現unsafe類的getAndAddInt實現原理:迴圈判斷當前的值和主記憶體值是否一致,相等就加一,用到的算 法CAS全稱compareAndSwapInt實現是native
AtomicLong和LongAdder(JDK1.8)前者是死迴圈判斷做的更新頻繁效能低,後者是核心數值分組,分組計算提 高效能高有精度問題
AtomicReference <t> compareAndSet(0,2)判斷賦值避免先檢查後執行不安全的寫法
AtomicStampReference:避免ABA問題,原子的CAS實現會出現執行緒1把A改為B又把B改為了A執行緒2把原來的A 和現在的A做比較條件成立,也進行了交換違背設計思路
一個執行緒對主記憶體的修改可以及時的被其他執行緒觀察到 volatile修飾的變數,還可以禁止指令重排序
一個執行緒觀察其他執行緒中的指令執行順序,由於指令重排序的存在,改觀察結果一般雜亂無序,單執行緒中:指令 重排序不會影響最後的結果
- 可見性
- 有序性
- synchonized與鎖
- 揮發物
- happes-前