執行緒安全-非阻塞同步
阿新 • • 發佈:2021-11-06
執行緒安全-非阻塞同步
執行緒安全-非阻塞同步
阻塞同步:互斥同步存在的問題時 進行 執行緒阻塞 和 喚醒所帶來的 效能問題, 這種同步稱為 阻塞同步(Blocking Synchronization)
這是一種悲觀併發策略
非阻塞同步:
不同於 悲觀併發策略, 而是使用基於 衝突檢測的 樂觀併發策略, 就是先進行操作
如果沒有其他執行緒徵用共享資料, 則操作成功; 否則就是產生了衝突
採取不斷重試直到成功為止的策略, 這種策略不需要把 執行緒掛起, 稱為 非阻塞同步
使用硬體處理器指令 進行不斷重試策略(JDK1.5以後)
-
測試並設定(Test-and-Set)
-
獲取並增加(Fetch-and-Increment)
-
交換(swap)
-
比較並交換(Compare-and-Swap, 簡稱CAS)
-
載入連結, 條件儲存(Load-Linked, Store-conditional, 簡稱LL, SC)
例: Java實現類AtomicInteger, AtomicDouble等等
用 AtomicInteger來改進
class Counter { private AtomicInteger count = new AtomicInteger(); public void increment() { count.incrementAndGet(); } // 使用AtomicInteger之後, 不需要加鎖, 也可以實現執行緒安全 public int getCount() { return count.get(); } }
參考連結
https://www.xuetangx.com/learn/THU08091000252/THU08091000252/7754101/video/12732939