1. 程式人生 > 其它 >Java 8 中 Adder 和 Accumulator 有什麼區別?

Java 8 中 Adder 和 Accumulator 有什麼區別?

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 提供了自定義的函式操作。