class DemoData{
public volatile int value1 = 1;
volatile int value2 = 2;
protected volatile int value3 = 3;
private volatile int value4 = 4;
volatile Integer value5=5;
}
final AtomicReferenceFieldUpdater updater=AtomicReferenceFieldUpdater.newUpdater(DemoData.class, Integer.class, "value5"); //
for(int i = 0 ; i < 10 ; i++) { //开启10个线程
new Thread() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
updater.compareAndSet(data, data.value5, data.value5+1);
//int now = data.value5;
//System.out.println(Thread.currentThread().getName() + " get value : " + now);
}
}.start();
}
Thread.sleep(2000);
System.out.println("最后的值:"+data.value5);
不是原子的么,最后的结果和没用一样,求大神科普