Подтвердить что ты не робот

Семафор и синхронизация

Я не мог полностью понять следующее из описания семафора в javadocs.

Обратите внимание, что блокировка синхронизации не установлена когда приобретается(), называется будет препятствовать тому, чтобы элемент вернулся в пул. Семафор инкапсулирует синхронизацию необходимо ограничить доступ к пулу, отдельно от любой синхронизации необходимых для поддержания согласованности самого пула.

Может кто-то, пожалуйста, помогите мне понять это и его последствия.

4b9b3361

Ответ 1

Семафор действует как ограничитель доступной глубины пула ресурсов; например, семафор с емкостью 10 позволяет получить максимум 10 потоков для его получения сразу, а любые другие потоки, которые пытаются его получить, будут блокироваться до тех пор, пока один из других потоков не освободит его.

Это несколько отличается от обычного взаимного исключения или блокировки монитора, который обычно используется для предотвращения одновременного изменения нескольких потоков одним и тем же переменным и вызывания противоречивых результатов или состояния программы.

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