1. 程式人生 > 其它 >執行緒安全-非阻塞同步

執行緒安全-非阻塞同步

執行緒安全-非阻塞同步

執行緒安全-非阻塞同步

阻塞同步:互斥同步存在的問題時 進行 執行緒阻塞 和 喚醒所帶來的 效能問題, 這種同步稱為 阻塞同步(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