引言:在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
1.AtomicInteger的基本方法
(1) 创建一个不传值的,此时默认值为0
AtomicInteger atomicInteger = new AtomicInteger();
System.out.println(atomicInteger.get());
---->输出: 0
(2) set()/get()
AtomicInteger atomicInteger = new AtomicInteger();
atomicInteger.set(999);
System.out.println(atomicInteger.get());
---->输出: 999
(3) compareAndSet(expectedValue,newValue)
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(0);
System.out.println(atomicInteger.get());
int expectedValue = 123;
int newValue = 234;
Boolean b =atomicInteger.compareAndSet(expectedValue, newValue);
System.out.println(b);
System.out.println(atomicInteger);
}
----》输出结果为: 0 false 0
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(123);
System.out.println(atomicInteger.get());
int expectedValue = 123;
int newValue = 234;
Boolean b =atomicInteger.compareAndSet(expectedValue, newValue);
System.out.println(b);
System.out.println(atomicInteger);
}
-----》输出结果为: 123 true 234
由上可知该方法表示,atomicInteger的值与expectedValue相比较,如果不相等,则返回false,atomicInteger原有值保持不变;如果两者相等,则返回true,atomicInteger的值更新为newValue
(4) getAndAdd()方法与AddAndGet方法
AtomicInteger atomicInteger = new AtomicInteger(123);
System.out.println(atomicInteger.getAndAdd(10)); --123
AtomicInteger atomicInteger = new AtomicInteger(123);
System.out.println(atomicInteger.addAndGet(10)); --133
(4) getAndDecrement()和DecrementAndGet()方法
AtomicInteger atomicInteger = new AtomicInteger(123);
System.out.println(atomicInteger.get()); --123
System.out.println(atomicInteger.getAndDecrement()); --123 获取当前值并自减
System.out.println(atomicInteger.get()); --122
System.out.println(atomicInteger.decrementAndGet()); --121 先自减再获取减1后的值
System.out.println(atomicInteger.get()); --121
使用AtomicInteger是非常的安全的.而且因为AtomicInteger由硬件提供原子操作指令实现的。在非激烈竞争的情况下,开销更小,速度更快。
版权声明:本文为qq_24099547原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。