Mediumsemaphore
Что такое Semaphore?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Semaphore — счётчик permits для ограничения доступа к ресурсу. N permits — до N потоков одновременно. Применения: pool of resources (connection/thread pool), rate limiter, limit concurrent access.
Semaphore sem = new Semaphore(3); // 3 permits
sem.acquire(); // -1 permit, блокирует если 0
try {
useResource();
} finally {
sem.release(); // +1 permit
}
if (sem.tryAcquire(1, TimeUnit.SECONDS)) { /* взяли с timeout */ }- Fair vs non-fair: fair — FIFO, non-fair — новички могут «вклиниться»;
acquire(N),release(N)— несколько permits сразу;- Разница с
Lock: Lock = 1 permit exclusive, Semaphore — N permits, multiple holders; - Binary semaphore (N=1) — mutex, но не reentrant по умолчанию;
- Реализация — на основе AQS (как ReentrantLock, CountDownLatch).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.