Sobes.tech
Назад к вопросам
Middle — Middle+
55

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

Ответ от нейросети

sobes.tech AI

Семафор в Java — это механизм синхронизации, который управляет доступом к ограниченному числу ресурсов или контролирует количество одновременно выполняющихся потоков. Он содержит счетчик, который уменьшается при захвате семафора (acquire) и увеличивается при освобождении (release).

Если счетчик равен нулю, потоки, пытающиеся выполнить acquire, блокируются и ждут, пока другой поток вызовет release. Таким образом, семафор позволяет ограничить количество потоков, выполняющих критическую секцию, и организовать ожидание завершения работы нескольких потоков.

Пример использования семафора для ограничения одновременного доступа к ресурсу:

import java.util.concurrent.Semaphore;

Semaphore semaphore = new Semaphore(3); // максимум 3 потока одновременно

void accessResource() {
    try {
        semaphore.acquire(); // захват семафора
        // критическая секция
        System.out.println(Thread.currentThread().getName() + " получил доступ");
        Thread.sleep(1000); // имитация работы
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    } finally {
        semaphore.release(); // освобождение семафора
        System.out.println(Thread.currentThread().getName() + " освободил доступ");
    }
}

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