package japan.example.test;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicStampedReference;
public class FinalTest {
public final static AtomicStampedReference<String> ATOMIC_REFERENCE = new AtomicStampedReference<String>("abc", 0);
public static void main(String[] args) throws IOException {
for (int i = 0; i < 100; i++) {
final int num = i;
final int stamp = ATOMIC_REFERENCE.getStamp();
new Thread(() -> {
try {
Thread.sleep(Math.abs((int) (Math.random() * 100)));
} catch (InterruptedException e) {
e.printStackTrace();
}
if (ATOMIC_REFERENCE.compareAndSet("abc", "abc2", stamp, stamp + 1)) {
System.out.println("我是线程:" + num + ",我获得了锁进行了对象修改!");
}
}).start();
}
new Thread(() -> {
int stamp = ATOMIC_REFERENCE.getStamp();
while (ATOMIC_REFERENCE.compareAndSet("abc2", "abc", stamp, stamp + 1)) {
System.out.println("已经改回为原始值!");
}
}).start();
// System.in.read();
}
}