Управление пулами соединений с помощью семафоров (Java) - PullRequest
0 голосов
/ 15 июля 2011

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

В пуле соединений работает фоновый поток, который периодически отправляет тактовые импульсы для каждого соединения. Теперь, если сердцебиение не срабатывает, тогда это соединение закрывается, и предпринимается попытка создать новое. Я хочу убедиться в том, что при открытии и закрытии соединения в пуле я хочу, чтобы разрешения увеличивались и уменьшались, чтобы это напрямую отражало количество соединений в пуле. Я могу уменьшить количество разрешений, используя API reduPermits (m), но для увеличения единственный ли способ вызывать функцию release () (даже если она не была получена) несколько раз на семафоре?

1 Ответ

1 голос
/ 15 июля 2011

Да, release() и release(int) - методы, используемые для увеличения количества доступных разрешений. Единственная причина, по которой существует reducePermits(int), заключается в предоставлении неблокирующих средств для уменьшения количества доступных разрешений. release в любом случае неблокирует, поэтому функция increasePermits будет полностью избыточной.

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