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

Метод await

Метод await класса CountDownLatch блокирует текущий поток до тех пор, пока счетчик защелки не достигнет нуля. Если счетчик уже равен нулю, метод возвращается немедленно. Метод не принимает параметров и возвращает void. Если поток был прерван во время ожидания, метод выбрасывает исключение InterruptedException.

Существует также перегруженная версия метода, которая принимает первым параметром время ожидания, а вторым - единицу измерения времени. В этом случае метод возвращает boolean: true, если счетчик достиг нуля, и false, если время ожидания истекло.

Синтаксис

latch.await() latch.await(timeout, unit)

Пример

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

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(); }).start(); } latch.await(); System.out.println("All threads finished"); } }

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

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

Пример

Давайте используем версию метода с таймаутом. Если потоки не успеют завершиться за 1 секунду, метод вернет false:

import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(2); new Thread(() -> { try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } latch.countDown(); }).start(); boolean res = latch.await(1, TimeUnit.SECONDS); System.out.println("Result: " + res); } }

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

"Result: false"

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

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