Существует класс потоков, внутри которого запускается исполнительница и 5 потоков внутри него, а также есть класс подсчета с атомным изменением переменной. Внутри каждого потока существует цикл, который меняет переменную, пока она не станет 20. Как я уже писал, чтение и письмо должны быть атомными, но он все еще возвращается 21-22.class Counter {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
this.count.incrementAndGet();
}
public int getCount() {
return this.count.get();
}
}
< /code>
class Threads {
public static int main() {
var count = 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 (count.getCount() < 20) {
count.increment();
}
latch.countDown();
});
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
return count.getCount();
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... nc-threads
Java Sync Threads ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Std :: sync :: oncelock и oney_cell :: sync :: lazy не возвращайте тот же тип
Anonymous » » в форуме MySql - 0 Ответы
- 546 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему этот код не работает? Я хочу повторить метод .join java threads в JS
Anonymous » » в форуме Javascript - 0 Ответы
- 1 Просмотры
-
Последнее сообщение Anonymous
-