Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
1039 of 1172 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 для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить