1. 构造

AtomicLong al = new AtomicLong();
AtomicLong al = new AtomicLong(0L);

无参构造,相当于AutomicLong(0L)

有参构造,初始化为initValue

2. 自增1

AtomicLong al = new AtomicLong();
System.out.println(al.getAndIncrement()); // 先返回0,再自增
System.out.println(al.incrementAndGet()); // 先自增,后返回2

类比AtomicInteger:

getAndIncrement先返回现值,后自增1

incrementAndGet先自增1,后返回值

3. 自减1

AtomicLong al = new AtomicLong(5L);
System.out.println(al.getAndDecrement()); // 先返回5,再自减
System.out.println(al.decrementAndGet()); // 先自减,后返回3

类比AtomicInteger:

getAndDecrement先返回现值,后自减1

decrementAndGet先自减1,后返回值

4. 如果原来是A,则更新成B

public boolean compareAndSet(long source, long dest):source是改之前的值,Dest是改之后的值,source与当前真实值匹配了才能执行成功,返回值表示是否执行成功。

AtomicLong al = new AtomicLong(5L);
System.out.println(al.compareAndSet(4L, 6L)); // 如果原值为4,更新成6, false
System.out.println(al.get()); // 5System.out.println(al.compareAndSet(5L, 7L)); // 如果原值为5,更新成7, true
System.out.println(al.get()); // 7

5. 自增/自减N

public long getAndAdd(long delta): 先获取当前值,再进行计算val = val + delta

public long addAndGet(long delta): 先计算 val = val + delta,再返回最新值

AtomicLong al = new AtomicLong(5L);
System.out.println(al.getAndAdd(4L)); // 返回现值5,再计算
System.out.println(al.addAndGet(-3L)); // 计算减法,再返回结果6

当然,这个方法也支持负数参数,也就意味着可以做减法

6. 硬编码的二元计算逻辑

public long getAndUpdate (LongUnaryOperator opeartion): 使用lambda表达式进行二元运算,获取到的是旧值。

public long updateAndGet (LongUnaryOperator opeartion): 使用lambda表达式进行二元运算,获取到的是新值。

AtomicLong al = new AtomicLong(5L);
System.out.println(al.getAndUpdate(x-> x + 4)); // 返回现值5,再计算
System.out.println(al.updateAndGet(x -> x - 3)); // 计算减法,再返回结果6

当然,这里支持减法也同样没问题

7.  非硬编码的二元运算逻辑

public long getAndAccumulate(long factor, LongBinaryOperator operation): 先返回旧值,再计算
public long accumulateAndGet(long factor, LongBinaryOperator operation): 先计算,再返回新值

AtomicLong al = new AtomicLong(5L);
System.out.println(al.getAndAccumulate(4L, Long::sum)); // 返回现值5,再计算
System.out.println(al.accumulateAndGet(-3L, (a, b) -> b - a)); // 计算减法,再返回结果-12

同样,这个方法的自由度大大提高

8. 直接赋值

public void set(long newVal): 直接更新为新值,区别于compareAndSet需要比对旧值。

AtomicLong al = new AtomicLong(5L);
al.set(4L);
System.out.println(al.get()); // 返回4

9. 直接取值

public int get(): 取最新值

附:JAVA的AtomicLong是依赖位操作的,底层不支持64位无锁操作的话,就会默认采用synchronized

【AtomicLong】常规用法相关推荐

  1. mysql中flush用法,flush 的常规用法:

    flush 的常规用法: flush  logs : 刷新二进制日志文件 flush  PRIVILEGES:刷新权限,修改权限或密码后,需要使用到该命令 flush tables:关闭所有表,并清空 ...

  2. Excel统计函数COUNTIF()的常规用法介绍

    Excel统计函数COUNTIF()的常规用法介绍 COUNTIF函数常规用法一 基本简介作用  用来计算区域中满足给定条件的单元格的个数. 语法讲解 COUNTIF(range,criteria) ...

  3. mysql load data outfile_mysql load data infile和into outfile的常规用法:

    load data 可以将文件中的数据导入到表中,这种导入方法快速,高效. 但是很容易出错,用法也比较复杂.需要额外定定义行分隔符,列分隔符. 不同的格式文件,行,列分隔符的表示方式不一样. 但是lo ...

  4. java lazy_Java AtomicLong lazySet()用法及代码示例

    Java.util.concurrent.atomic.AtomicLong.lazySet()是Java中的内置方法,可更新先前的值并将其设置为在参数中传递的新值. 用法: public final ...

  5. java atomiclong 使用_Java AtomicLong set()用法及代码示例

    Java.util.concurrent.atomic.AtomicLong.set()是Java中的内置方法,可更新先前的值并将其设置为在参数中传递的新值. 用法: public final voi ...

  6. java中for的常规用法_Java for循环的几种用法详解

    本文非常适合初学Java的程序员,主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看. J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方 ...

  7. python列表冒号逗号常规用法

    列表中冒号用法 L = (1,2,3,4,5,6) 取第i个元素:L[i] 取倒数第i个元素:L[-i] 取第i到第j个元素(不包含第k个):L[i:j] 取第i个元素以后剩下的元素:L[i:] 取前 ...

  8. List Stream 的常规用法

    1. 常规元素去重 // 遍历后判断赋给另一个List集合,保持原来顺序     public static void ridRepeat1(List<String> list) {   ...

  9. 锂电池特性总结-充放电,新旧识别,常规用法

    目录 电池容量的单位和容量的表示方法 电池容量大小的比较 剩余电量的测量与计算方法 电池容量的不同含义 电池的寿命 充放电电流 电池容量的单位和容量的表示方法 电池容量是个能量单位,指的是电池总的能量 ...

最新文章

  1. Data Lake Analytics + OSS数据文件格式处理大全
  2. C# 利用Jmail接收邮件
  3. github 笔记
  4. [USACO1.4]等差数列 Arithmetic Progressions
  5. scrapy框架的理解
  6. “华为云-东吴杯”圆满成功,顶尖参赛者推动“智造”场景结构升级
  7. Ubuntu IP设置为静态
  8. C++ mmap 多进程文件读写
  9. 《缠中说禅108课》57:当下图解分析再示范
  10. 数据拟合(excel)
  11. 利用接口(vue等)调用thinkphp6(tp6)验证码验证结果总是失败的解决方案
  12. 无法加入域--隶属于域、工作组选项为灰色
  13. Borůvka (Sollin) 算法求 MST 最小生成树
  14. echarts 双Y轴,双X轴, 折线图折点,折点与直方对应
  15. 【Qt实战派学习群】 建立啦!
  16. oa html5管理系统模板,OA系统html5整站模板 后台模板
  17. jsp脚本自学及总结
  18. 不写情书,程序员还要学写作吗?
  19. 深度学习论文阅读目标检测篇(四)中文版:YOLOv1《 You Only Look Once: Unified, Real-Time Object Detection》
  20. Spring Data JPA-单向一对一关联映射

热门文章

  1. 重定向次数过多怎么解决(www.bing.com 重定向次数过多)
  2. cesium中geoJSON数据的生成
  3. ORACLE这门武功
  4. myclub对阵计算机等级提示,TOPICS | PES - PRO EVOLUTION SOCCER 2019 Official Site
  5. QML Canvas 绘制文本
  6. 安卓固件修改工具_小米平板4(4 Plus)类原生安卓10刷入教程
  7. Python:pyinstaller如何将一个项目的.py和相关资源文件打包生成.exe文件
  8. 消息队列/Redis - 把Redis当作队列来用,真的合适吗?
  9. 安卓手机卡顿怎么解决_手机卡顿怎么办? 用这招“轻松应对”,望周知!
  10. linux cc攻击脚本,GitHub - yuanguoping/CCKiller: Linux轻量级CC攻击防御工具脚本