1. 程式人生 > >併發及併發的執行緒安全處理

併發及併發的執行緒安全處理

目錄

執行緒安全性

 

 

 

  1. 原子性

       提供了互斥訪問,同一時刻只有一個執行緒可以來對它操作

      原子包:具有原子性,執行緒安全的,

       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修飾的變數,還可以禁止指令重排序

 一個執行緒觀察其他執行緒中的指令執行順序,由於指令重排序的存在,改觀察結果一般雜亂無序,單執行緒中:指令                           重排序不會影響最後的結果  

  1. 可見性
  2. 有序性
  3. synchonized與鎖
  4. 揮發物
  5. happes-前