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 подскажет развёрнутый ответ в реальном времени.