import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
public class Synchronized{
public static AtomicInteger count = new AtomicInteger(0);
public static synchronized void increment() {
count.incrementAndGet();
}
public static void main(String[] args) {
ExecutorService exector = Executors.newFixedThreadPool(2);
IntStream.range(0, 1000).forEach( i -> exector.submit(Synchronized:: increment));
System.out.println(count.get());
}
}
This does not print 1000 at the end. It prints anywhere from 600 to 1000 . so It appears that it is not thread-safe. Could someone explain why this is not thread safe?