Возможно, последняя строка «Семафор не ограничен количеством разрешений, с которыми он был создан» - это ваш источник путаницы.
Семафор при создании инициализируется с фиксированным набором разрешений. Затем это становится максимальным количеством разрешений, которые семафор может одновременно выдавать в любое время в течение времени жизни этого семафора. Вы не можете динамически увеличивать это число, кроме как путем повторной инициализации семафора.
Значение, если строка в кавычках (из JCIP) такова: во-первых, семантика того, как работает семафор, не ограничивается деталями выдачи и восстановления разрешения - это проявляется в том, что любой поток может иметь доступ к семафору может быть разрешен (даже если этот поток не имел разрешения в первую очередь)
Во-вторых, вы можете динамически уменьшить максимальное количество разрешений семафора - вызвав метод reducePermits(int)
.