1. LongAdder 简介
LongAdder 是 Java 8 中新增的一种原子类型,它提供了一种比 AtomicLong 更高效的方式来维护一个可变的数字计数器。LongAdder 中的每个变量都是原子可变的,所以它可以在多线程环境中安全的使用。
LongAdder 的内部实现是一个双端链表,这个链表中的每一个节点都保存一个原子变量,这个原子变量就是 LongAdder 的值。当线程对 LongAdder 的值进行更新时,会先尝试在当前节点中更新,如果更新失败,就会在链表中新增一个节点,并在新增的节点中进行更新。
2. LongAdder 在多线程场景下的应用
LongAdder 在多线程场景下的应用主要有两个:
(1)计数器:LongAdder 可以用来记录程序中的某个事件发生的次数,比如统计程序中请求的数量、异常的数量等。
(2)锁分段:LongAdder 可以用来实现锁分段,比如在一个线程池中,可以将线程池中的线程按照线程 ID 进行分段,每一段都有一个 LongAdder,线程在获取锁时,只需要获取该段的 LongAdder 即可,而不用获取整个线程池的锁,从而提高系统的并发性能。
LongAdder 是 Java 8 中新增的一种原子类型,它提供了一种比 AtomicLong 更高效的方式来维护一个可变的数字计数器。LongAdder 在多线程环境下可以用来做计数器,也可以用来实现锁分段,从而提高系统的并发性能。