Семафор действует как ограничитель доступной глубины пула ресурсов; Например, семафор с емкостью 10 позволяет получить его максимум 10 потокам одновременно, и любые последующие потоки, которые пытаются получить его, будут блокироваться, пока один из других потоков не освободит его.
Это несколько отличается от обычного взаимного исключения или блокировки монитора, которые обычно используются для предотвращения одновременного изменения одних и тех же переменных несколькими потоками и получения противоречивых результатов или состояния программы.
Рассмотрим, например, пул соединений с ограничением в 10 соединений. Каждый поток, которому требуется соединение, получит семафор на время его использования соединения (что предотвращает слишком много потоков, запрашивающих соединения одновременно), но объект пула должен также использовать синхронизированные блоки или методы при извлечении соединений из его внутреннего собирать или помещать их обратно, чтобы предотвратить такие вещи, как потеря соединения или ошибочная передача одного и того же соединения двум разным потокам, потому что они спрашивают одновременно.