zoukankan      html  css  js  c++  java
  • Java8 比AtomicLong更加高效的原子操作LogAdder

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

    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的循环方式。

    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
  • 相关阅读:
    Mooncake (排序+贪心)
    The Black Hole of Numbers (strtoint+inttostr+sort)
    随机排序
    EF 随机排序
    禁用DropDownList的Items
    sql之left join、right join、inner join的区别
    SQL优化-索引
    .net 面试问题 汇总
    从简单的例子理解泛型
    1.1 使用内置的Camera应用程序捕获图像
  • 原文地址:https://www.cnblogs.com/47Gamer/p/15037518.html
Copyright © 2011-2022 走看看