1 package npe; 2 3 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; 4 import java.util.concurrent.atomic.AtomicLongFieldUpdater; 5 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; 6 7 public class AtomicFieldUpdater { 8 9 volatile Object x; 10 volatile int y; 11 volatile long z; 12 13 AtomicReferenceFieldUpdater<AtomicFieldUpdater , Object> updaterX 14 = AtomicReferenceFieldUpdater.newUpdater(AtomicFieldUpdater.class, Object.class, "x"); 15 16 AtomicIntegerFieldUpdater<AtomicFieldUpdater> updaterY 17 = AtomicIntegerFieldUpdater.newUpdater(AtomicFieldUpdater.class, "y"); 18 19 AtomicLongFieldUpdater<AtomicFieldUpdater> updaterZ 20 = AtomicLongFieldUpdater.newUpdater(AtomicFieldUpdater.class, "z"); 21 22 int f() { 23 return x.hashCode(); 24 } 25 26 void setX(Object foo) { 27 updaterX.set(this, foo); 28 } 29 void setY(int foo) { 30 updaterY.set(this, foo); 31 } 32 33 void setZ(long foo) { 34 updaterZ.set(this, foo); 35 } 36 37 }