Java 8 中 Adder 和 Accumulator 有什麼區別?
阿新 • • 發佈:2021-08-13
Adder 的介紹
我們要知道 Adder 和 Accumulator 都是 Java 8 引入的,是相對比較新的類。
對於 Adder 而言,比如最典型的 LongAdder,在高併發下 LongAdder 比 AtomicLong 效率更高,
因為對於 AtomicLong 而言,它只適合用於低併發場景,否則在高併發的場景下,由於 CAS 的衝突概率大,會導致經常自旋,影響整體效率。
而 LongAdder 引入了分段鎖的概念,當競爭不激烈的時候,所有執行緒都是通過 CAS 對同一個 Base 變數進行修改,但是當競爭激烈的時候,LongAdder 會把不同執行緒對應到不同的 Cell 上進行修改,降低了衝突的概率,從而提高了併發性。
Accumulator 的介紹
那麼 Accumulator 又是做什麼的呢?Accumulator 和 Adder 非常相似,實際上 Accumulator 就是一個更通用版本的 Adder,
比如: LongAccumulator 是 LongAdder 的功能增強版,因為 LongAdder 的 API 只有對數值的加減,而 LongAccumulator 提供了自定義的函式操作。