Существует класс потоков, внутри которого запускается Executorservice, а 5 потоков внутри него, а также есть класс Counter с атомным изменением переменной. Внутри каждого потока существует цикл, который меняет переменную, пока она не станет 20. Как я уже писал, чтение и письмо должны быть атомными, но он все еще возвращается 21-22.class Counter {
private AtomicInteger atomicInteger = new AtomicInteger(0);
public void increment() {
this.atomicInteger.incrementAndGet();
}
public int getCount() {
return this.atomicInteger.get();
}
}
< /code>
class Threads {
public static int main() {
var counter = new Counter();
ExecutorService executor = Executors.newFixedThreadPool(3);
CountDownLatch latch = new CountDownLatch(5);
for (int i = 0; i < 5; i++) {
executor.submit(() -> {
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
while (counter.getCount() < 20) {
counter.increment();
}
latch.countDown();
});
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
return count.getCount();
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... ting-count