AtomicInteger的用法

引言:在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由硬件提供原子操作指令实现的。在非激烈竞争的情况下,开销更小,速度更快。

你可能感兴趣的:(atomicInteger)