Почему колебается результат на 1 единицу при использовании атомарности?
55251 или 55252
package src;
import java.util.concurrent.atomic.AtomicInteger;
public class Lucky {
static AtomicInteger x = new AtomicInteger(0);
static AtomicInteger count = new AtomicInteger(0);
static class LuckyThread extends Thread {
@Override
public void run() {
while (x.get() < 999999) {
int i = x.incrementAndGet();
if ((i % 10) + (i / 10) % 10 + (i / 100) % 10 == (i / 1000)
% 10 + (i / 10000) % 10 + (i / 100000) % 10) {
System.out.println(x);
count.incrementAndGet();
}
}
}
}
public static void main(String[] args) throws InterruptedException {
Thread t1 = new LuckyThread();
Thread t2 = new LuckyThread();
Thread t3 = new LuckyThread();
t1.start();
t2.start();
t3.start();
t1.join();
t2.join();
t3.join();
System.out.println("Total: " + count);
}
}
P.S при синхронизации вроде бы проблем нет