【AtomicLong】常规用法
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】常规用法相关推荐
- mysql中flush用法,flush 的常规用法:
flush 的常规用法: flush logs : 刷新二进制日志文件 flush PRIVILEGES:刷新权限,修改权限或密码后,需要使用到该命令 flush tables:关闭所有表,并清空 ...
- Excel统计函数COUNTIF()的常规用法介绍
Excel统计函数COUNTIF()的常规用法介绍 COUNTIF函数常规用法一 基本简介作用 用来计算区域中满足给定条件的单元格的个数. 语法讲解 COUNTIF(range,criteria) ...
- mysql load data outfile_mysql load data infile和into outfile的常规用法:
load data 可以将文件中的数据导入到表中,这种导入方法快速,高效. 但是很容易出错,用法也比较复杂.需要额外定定义行分隔符,列分隔符. 不同的格式文件,行,列分隔符的表示方式不一样. 但是lo ...
- java lazy_Java AtomicLong lazySet()用法及代码示例
Java.util.concurrent.atomic.AtomicLong.lazySet()是Java中的内置方法,可更新先前的值并将其设置为在参数中传递的新值. 用法: public final ...
- java atomiclong 使用_Java AtomicLong set()用法及代码示例
Java.util.concurrent.atomic.AtomicLong.set()是Java中的内置方法,可更新先前的值并将其设置为在参数中传递的新值. 用法: public final voi ...
- java中for的常规用法_Java for循环的几种用法详解
本文非常适合初学Java的程序员,主要是来了解一下Java中的几种for循环用法,分析得十分详细,一起来看看. J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方 ...
- python列表冒号逗号常规用法
列表中冒号用法 L = (1,2,3,4,5,6) 取第i个元素:L[i] 取倒数第i个元素:L[-i] 取第i到第j个元素(不包含第k个):L[i:j] 取第i个元素以后剩下的元素:L[i:] 取前 ...
- List Stream 的常规用法
1. 常规元素去重 // 遍历后判断赋给另一个List集合,保持原来顺序 public static void ridRepeat1(List<String> list) { ...
- 锂电池特性总结-充放电,新旧识别,常规用法
目录 电池容量的单位和容量的表示方法 电池容量大小的比较 剩余电量的测量与计算方法 电池容量的不同含义 电池的寿命 充放电电流 电池容量的单位和容量的表示方法 电池容量是个能量单位,指的是电池总的能量 ...
最新文章
- Data Lake Analytics + OSS数据文件格式处理大全
- C# 利用Jmail接收邮件
- github 笔记
- [USACO1.4]等差数列 Arithmetic Progressions
- scrapy框架的理解
- “华为云-东吴杯”圆满成功,顶尖参赛者推动“智造”场景结构升级
- Ubuntu IP设置为静态
- C++ mmap 多进程文件读写
- 《缠中说禅108课》57:当下图解分析再示范
- 数据拟合(excel)
- 利用接口(vue等)调用thinkphp6(tp6)验证码验证结果总是失败的解决方案
- 无法加入域--隶属于域、工作组选项为灰色
- Borůvka (Sollin) 算法求 MST 最小生成树
- echarts 双Y轴,双X轴, 折线图折点,折点与直方对应
- 【Qt实战派学习群】 建立啦!
- oa html5管理系统模板,OA系统html5整站模板 后台模板
- jsp脚本自学及总结
- 不写情书,程序员还要学写作吗?
- 深度学习论文阅读目标检测篇(四)中文版:YOLOv1《 You Only Look Once: Unified, Real-Time Object Detection》
- Spring Data JPA-单向一对一关联映射
热门文章
- 重定向次数过多怎么解决(www.bing.com 重定向次数过多)
- cesium中geoJSON数据的生成
- ORACLE这门武功
- myclub对阵计算机等级提示,TOPICS | PES - PRO EVOLUTION SOCCER 2019 Official Site
- QML Canvas 绘制文本
- 安卓固件修改工具_小米平板4(4 Plus)类原生安卓10刷入教程
- Python:pyinstaller如何将一个项目的.py和相关资源文件打包生成.exe文件
- 消息队列/Redis - 把Redis当作队列来用,真的合适吗?
- 安卓手机卡顿怎么解决_手机卡顿怎么办? 用这招“轻松应对”,望周知!
- linux cc攻击脚本,GitHub - yuanguoping/CCKiller: Linux轻量级CC攻击防御工具脚本