跳转至

Java 原子类

时间: 2018/6/30 7:47:28

参考:

Java 原子类#

通过CompareAndSet的方式实现数据的原子变更,避免多线程情况下出现问题。

原子变量#

  • AtomicInteger
  • AtomicLong
  • AtomicBoolean
  • AtomicReference

代码示例:

1
2
3
AtomicReference<TestInteger> reference = new AtomicReference<TestInteger>();
TestInteger newTest = new TestInteger();
reference.compareAndSet(testInteger, newTest);

原子数组#

  • AtomicIntegerArray
  • AtomicLongArray
  • AtomicReferenceArray

代码示例:

1
2
AtomicIntegerArray integerArray = new AtomicIntegerArray(10);
integerArray.addAndGet(1, 10);

原子字段#

基于反射机制实现

  • AtomicIntegerFieldUpdater
  • AtomicLongFieldUpdater
  • AtomicReferenceFieldUpdater

代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public static void main(String[] args) {
    AtomicIntegerFieldUpdater<TestInteger> ageUpdater = AtomicIntegerFieldUpdater.newUpdater(TestInteger.class, "age");
    TestInteger testInteger = new TestInteger();
    ageUpdater.addAndGet(testInteger, 100);
    System.out.println(ageUpdater.get(testInteger));
}

private static class TestInteger {
    volatile int age = 100;
}