AtomicIntegerFieldUpdater 介绍
多线程开发的时候,如果一个类是自己编写的,则可以在编写的时候把成员变量定义为 Atomicxxx 类型。但如果是一个已经有的类,在不能更改其源代码的情况下,要想实现对其成员变量的原子操作,就需要 AtomicIntegerFieldUpdater、AtomicLongFieldUpdater 和 AtomicReferenceFieldUpdater。
使用示例
两个线程对 test 对象的 volatile 变量,分别进行加和减操作。
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
public class Test {
public volatile int num;
private AtomicIntegerFieldUpdater<Test> updater = AtomicIntegerFieldUpdater
.newUpdater(Test.class, "num");
public static void main(String[] args) throws Exception{
Test test = new Test();
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
test.updater.incrementAndGet(test);
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100000; i++) {
test.updater.decrementAndGet(test);
}
}
});
thread1.start();
thread2.start();
Thread.sleep(10 * 1000);
System.out.println("查看num的值,num=" + test.num);
}
}
结果:
查看num的值,num=0