fzy-blog

Java8 比 AtomicLong 更加高效的原子操作 LogAdder LongAccumulator

2019-05-24

Java8 比 AtomicLong 更加高效的原子操作 LogAdder LongAccumulator

LongAdder LongAccumulator 用法实例
如果程序内有高度的竞争,大量的线程访问同一个原子值,可以使用 LongAdder 和 LongAccumulator,这个类是 Java 8 提供用于在高度竞争环境下替代 AtomicLong 的。

1
2
3
4
5
6
7
8
9
10
LongAdder adder = new LongAdder();
adder.add(2);
System.out.println(adder.intValue()); // 输出 2

adder.increment();
System.out.println(adder.sum()); // 输出 3 sum方法返回long型

// 同 accumulateAndGet 方法, 将原子值和传入的参数组合
LongAccumulator la = new LongAccumulator((left, right) -> left + right, 10);
System.out.println(la.intValue()); // 输出 10

AtomicInteger 更新方法
Java 8 增加了两个新方法 updateAndGet 和 accumulateAndGet 用于更新原子类的值,取代老 API 的循环方式。

1
2
3
4
5
6
7
8
9
AtomicInteger ai = new AtomicInteger();

// 多线程环境下安全更新
Integer i = ai.updateAndGet(x -> 5);
System.out.println(i); // 输出 5

// 多线程环境下安全更新 将原子值和传入的参数组合
ai.accumulateAndGet(1, (oldValue, paramValue) -> oldValue + paramValue);
System.out.println(ai.get()); // 输出 6
Tags: Java8
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章