AtomicInteger

本文翻译自http://tutorials.jenkov.com/java-util-concurrent/atomicinteger.html,人工翻译,仅供学习交流。

AtomicInteger

AtomicInteger类提供了一个int变量,可以以原子方式读写,也包含像compareAndSet()这样的高级原子操作。AtomicInteger类位于java.util.concurrent.atomic包中,所以完整的类名是java.util.concurrent.atomic.AtomicInteger。本文描述了在Java 8中找到的AtomicInteger版本,但第一个版本是在Java 5中添加的。AtomicInteger设计背后的原因在我的Java并发教程中比较和交换的文中解释过。

创建AtomicInteger

创建AtomicInteger是这样的:

AtomicInteger atomicInteger = new AtomicInteger();

这个例子创建了一个初始值为0的AtomicInteger。如果你想创建一个带有初始值的AtomicInteger,你可以这样做:

AtomicInteger atomicInteger = new AtomicInteger(123);

这个例子将值123作为参数传递给AtomicInteger构造函数,它将AtomicInteger实例的初始值设置为123。

获取AtomicInteger值

可以通过set()方法设置AtomicInteger实例的值。下面是AtomicInteger.set()的例子:

AtomicInteger atomicInteger = new AtomicInteger(123);

atomicInteger.set(234);

本例创建了一个AtomicInteger示例,初始值为123,然后在下一行将其值设为234。

比较和设置AtomicInteger值

AtomicInteger类也有一个原子的compareAndSet()方法。该方法将AtomicInteger实例的当前值与期望值进行比较,如果两个值相等,则为AtomicInteger实例设置一个新值。下面是AtomicInteger.compareAndSet()的例子:

AtomicInteger atomicInteger = new AtomicInteger(123);

int expectedValue = 123;
int newValue      = 234;
atomicInteger.compareAndSet(expectedValue, newValue);

这个例子首先创建了一个AtomicInteger实例,初始值为123。然后将AtomicInteger的值与期望值123进行比较,如果它们相等,则AtomicInteger的新值变为234;

添加到AtomicInteger值

AtomicInteger类包含一些可用于向AtomicInteger添加值并返回它的值的方法,方法如下:

  • addAndGet()
  • getAndAdd()
  • getAndIncrement()
  • incrementAndGet()
    addAndGet()向AtomicInteger添加一个数字,并在添加后返回它的值。getAndAdd()也向AtomicInteger添加一个数字,但返回AtomicInteger之前的值。使用这两种方法中的哪一种取决于实际用法。这里有两个例子:
AtomicInteger atomicInteger = new AtomicInteger();

System.out.println(atomicInteger.getAndAdd(10));
System.out.println(atomicInteger.addAndGet(10));

本例将输出值0和20。首先,在将10添加到之前,该示例获取AtomicInteger的值。它在加法之前的值为0。然后,该示例将10添加到AtomicInteger,并在添加之后获取值。现在的值是20。
您还可以通过这两个方法向AtomicInteger添加负数。结果实际上是一个减法。
方法getAndIncrement()和incrementAndGet()的工作原理类似于getAndAdd()和addAndGet(),只是在AtomicInteger的值上加1。

从AtomicInteger值中减去

AtomicInteger类也包含一些从AtomicInteger值中自动减去值的方法。方法如下

  • decrementAndGet()
  • getAndDecrement()
    decrementAndGet()从AtomicInteger值中减去1,并在减去之后返回它的值。getAndDecrement()也从AtomicInteger值中减去1,但返回AtomicInteger在减法之前的值。

下一节:AtomicLong

你可能感兴趣的:(Java,Concurrent,Utilities)