Жавовые синхронизации, доступ к атомикинтегеру для увеличения количества [дубликат]JAVA

Программисты JAVA общаются здесь
Anonymous
Жавовые синхронизации, доступ к атомикинтегеру для увеличения количества [дубликат]

Сообщение Anonymous »

Существует класс потоков, внутри которого запускается 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

Вернуться в «JAVA»