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

Метод release

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

Синтаксис

semaphore.release()

Пример

Давайте создадим семафор с 2 разрешениями и освободим одно из них:

import java.util.concurrent.Semaphore; public class Main { public static void main(String[] args) { Semaphore semaphore = new Semaphore(2); System.out.println(semaphore.availablePermits()); semaphore.release(); System.out.println(semaphore.availablePermits()); } }

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

2 3

Пример

Давайте захватим разрешение, а затем освободим его обратно:

import java.util.concurrent.Semaphore; public class Main { public static void main(String[] args) throws InterruptedException { Semaphore semaphore = new Semaphore(1); semaphore.acquire(); System.out.println(semaphore.availablePermits()); semaphore.release(); System.out.println(semaphore.availablePermits()); } }

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

0 1

Пример

Давайте покажем, как release разблокирует поток, ожидающий в acquire:

import java.util.concurrent.Semaphore; public class Main { public static void main(String[] args) throws InterruptedException { Semaphore semaphore = new Semaphore(0); Thread worker = new Thread(() -> { try { semaphore.acquire(); System.out.println("acquired"); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); worker.start(); Thread.sleep(100); System.out.println("before release: " + worker.getState()); semaphore.release(); worker.join(); System.out.println("after release: " + worker.getState()); } }

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

before release: WAITING acquired after release: TERMINATED

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

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