在Java基础中我们知道,普通的int类型或者Integer类型在进行++或者其他计数操作的时候,在编译后的字节码文件会先获取i1的值保存到程序技术栈,然后将程序技术栈的值保存到局部变量当中,然后再进行自增操作,这过程并不是一个线程安全的,所以我们就会使用一个线程安全的原子类AtomicInteger;
官方翻译得知它是一个原子递增的类
查看构造方法
可以知道构造方法中的值会被当当做初始值可以理解为 int i = 1
这里我们编写了一个修改的方法 IntUnaryOperator它是一个函数式接口而applyAsInt是获取参数传递过来的结果值,
i.get() 获取预期的值
applyAsInt得到需修改后的值,然后进行cas操作,我们在这里写了一个while(true)循环,如果没有循环那么if判断只会执行一次
全部代码图,value -> value * 5 为将i的值 * 5然后返回结果
正常执行结果图
可以看到我们查询正常执行,下面模拟异常执行
在获取i的值后停住,然后人工修改i的值
往下执行
可以看到if块不成立,因为我们修改后i的值为3,而预期的值为5,那么此次修改就不能成功,只能等待下一次if判断条件
可以看到我们的最终结果是15 -> 3 * 5;
以上就是原理累加器的基本使用