Sobes.tech
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);
    }
}