Junior — Senior
78
Одновременное увеличение двух счётчиков с помощью CountDownLatch
Компании, где спрашивали:
Условие задачи
Программа создаёт 100 000 задач, которые выполняются одновременно в пуле из 100 потоков. Каждая задача увеличивает два общих счётчика — incA и incB. Для того чтобы дождаться завершения всех задач перед выводом результатов, используется объект CountDownLatch. Требуется предсказать, какие значения будут напечатаны в конце работы программы.
public class Increment {
private static int incA = 0;
private static int incB = 0;
public static void main(String[] args) throws InterruptedException {
int totalTasks = 100000;
CountDownLatch latch = new CountDownLatch(totalTasks);
ExecutorService executor = Executors.newFixedThreadPool(100);
for (int i = 0; i < totalTasks; i++) {
executor.submit(() -> {
incA++;
incB++;
latch.countDown();
});
}
latch.await();
System.out.println(incA);
System.out.println(incB);
System.exit(0);
}
}