LongAdder
3. LongAdder
| Why | 虽然原子类提供了便捷的原子操作,但它们使用自旋锁的方式来实现,这在极端情况下可能导致某一个线程会频繁地对比失败无法设置新值进而自旋while(),导致性能的整体下降。 |
|---|---|
| How | LongAdder是为了解决这个性能问题而设计的。它采用一种分段锁的策略,将累加操作分散到多个单元(称为“单元”或“分段”),从而减少了竞争。这使得在高度并发的情况下,LongAdder能够提供更好的性能,避免了单一锁的瓶颈。 cells---->cell---->sum(base(无竞争时)+cells(多竞争时)) |