В Java существует класс Semaphore, который предоставляет механизм управления доступом к ресурсам. Семафоры часто используются для ограничения количества потоков, которые могут одновременно получить доступ к определенным ресурсам или выполнить определенный участок кода.
Пример использования Semaphore в Java:
В этом примере создается семафор с начальным числом разрешений равным 2. Затем создаются три потока (Thread 1, Thread 2, Thread 3), каждый из которых запрашивает разрешение у семафора, выполняет свою работу в критической секции (в данном случае, просто засыпает на 2 секунды), а затем освобождает разрешение.
Использование семафора позволяет управлять параллельным доступом к ресурсам и контролировать количество потоков, которые могут одновременно выполнять определенный участок кода.