Встречается на собеседованиях • сегодня

Как семафор реализует ожидание потоком завершения работы других потоков

Семафор в Java (java.util.concurrent.Semaphore) управляет доступом к ресурсу через счетчик. Потоки запрашивают разрешение (acquire()), уменьшая счетчик. Если счетчик = 0, поток блокируется до освобождения ресурса другим потоком (release()).

Пример ожидания завершения потоков:

java
Semaphore semaphore = new Semaphore(0); // начальное значение 0

// В основном потоке
new Thread(() -> {
    // работа потока
    semaphore.release(); // сигнализируем о завершении
}).start();

semaphore.acquire(); // ждем, пока счетчик не станет > 0

Отличие от CountDownLatch: семафор может освобождаться и захватываться многократно, а CountDownLatch одноразовый. Для ожидания завершения группы потоков лучше использовать CountDownLatch или CyclicBarrier.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы