package cn.yb.thread;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicStampedReference;
public class ThreadABADemo {
static AtomicStampedReference<Integer> atomicReference;
public static void main(String[] args) throws InterruptedException {
int j = 0;
while(j<100) {
atomicReference = new AtomicStampedReference(0,0);
Thread thread1 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 1000; i++) {
int stamp;
Integer reference;
do {
stamp = atomicReference.getStamp();
reference = atomicReference.getReference();
}while(!atomicReference.compareAndSet(reference, reference+1, stamp, stamp+1));
}
}
});
Thread thread2 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 1000; i++) {
int stamp;
Integer reference;
do {
stamp = atomicReference.getStamp();
reference = atomicReference.getReference();
}while(!atomicReference.compareAndSet(reference, reference+1, stamp, stamp+1)); }
}
});
thread1.start();
thread2.start();
thread1.join();
thread2.join();
System.out.println("n的最终值是:"+atomicReference.getReference());
j++;
}
}
}