import java.util.concurrent.atomic.AtomicInteger;
public class VolatilePrinter {
public static void main(String[] args) throws InterruptedException {
AtomicInteger atomicInteger = new AtomicInteger();
atomicInteger.set(0);
int maxNum = 10;
int threadNum = 3;
new Thread(() -> {
while (atomicInteger.get() < maxNum) {
synchronized (VolatilePrinter.class) {
if (atomicInteger.get() % threadNum == 1) {
System.out.println(Thread.currentThread().getName() + " num=" + atomicInteger.getAndIncrement());
}
}
}
}).start();
new Thread(() -> {
while (atomicInteger.get() < maxNum) {
synchronized (VolatilePrinter.class) {
if (atomicInteger.get() % threadNum == 2) {
System.out.println(Thread.currentThread().getName() + " num=" + atomicInteger.getAndIncrement());
}
}
}
}).start();
new Thread(() -> {
while (atomicInteger.get() < maxNum) {
synchronized (VolatilePrinter.class) {
if (atomicInteger.get() % threadNum == 0) {
System.out.println(Thread.currentThread().getName() + " num=" + atomicInteger.getAndIncrement());
}
}
}
}).start();
Thread.currentThread().join();
}
}