РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1029 of 1163 menu

Метод countDown

Метод countDown класса CountDownLatch уменьшает текущее значение счетчика на единицу. Метод не принимает параметров и не возвращает результата. Когда счетчик достигает нуля, все потоки, ожидающие на методе await, освобождаются и продолжают выполнение. Если счетчик уже равен нулю, вызов метода countDown ничего не меняет.

Синтаксис

latch.countDown()

Пример

Давайте создадим защелку со счетчиком 3 и запустим три потока, каждый из которых выполняет работу и вызывает countDown. Главный поток ожидает завершения всех трех:

import java.util.concurrent.CountDownLatch; public class Main { public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3); for (int i = 1; i <= 3; i++) { final int id = i; new Thread(() -> { System.out.println("Thread " + id + " started"); latch.countDown(); System.out.println("Thread " + id + " finished"); }).start(); } latch.await(); System.out.println("All threads finished"); } }

Результат выполнения кода:

"Thread 1 started" "Thread 1 finished" "Thread 2 started" "Thread 2 finished" "Thread 3 started" "Thread 3 finished" "All threads finished"

Пример

Давайте проверим, что после достижения нуля повторный вызов countDown не изменяет состояние защелки. Выведем значение счетчика через метод getCount:

import java.util.concurrent.CountDownLatch; public class Main { public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(1); System.out.println("Before: " + latch.getCount()); latch.countDown(); System.out.println("After first: " + latch.getCount()); latch.countDown(); System.out.println("After second: " + latch.getCount()); } }

Результат выполнения кода:

"Before: 1" "After first: 0" "After second: 0"

Смотрите также

  • класс CountDownLatch,
    который синхронизирует потоки по счетчику
  • метод await,
    который блокирует поток до обнуления счетчика
  • класс CyclicBarrier,
    который синхронизирует потоки в одной точке
  • класс Semaphore,
    который ограничивает число одновременных потоков
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить