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