#240 Потеря инкрементов в многопоточном коде
Что будет выведено?
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Increment {
private static int counter1 = 0;
private static int counter2 = 0;
public static void main(String[] args) throws InterruptedException {
int exercisesCount = 100_000;
CountDownLatch latch = new CountDownLatch(exercisesCount);
ExecutorService executor = Executors.newFixedThreadPool(100);
for (int i = 0; i < exercisesCount; i++) {
executor.submit(() -> {
counter1++;
counter2++;
latch.countDown();
});
}
latch.await();
System.out.println(counter1);
System.out.println(counter2);
System.exit(0);
}
}
Разбор вопроса
Войди, чтобы начать диалог
Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти
Доступно с Premium
Это лишь одно из решений, доступных с Premium. А ещё:
- 250+ продвинутых лекций
- 1300+ практических заданий
- 500+ решений задач с реальных собеседований
- Именные сертификаты Java Hub
- Расширенный доступ к AI-ментору