Есть ли причина, по которой вы не просто используете блокировку, так как она предназначена для защиты ресурсов, которые могут использоваться только в одном потоке за раз.
// in a client connection thread
lock.lock();
try {
// use connection to server B
} finally {
lock.unlock();
}
Это гарантирует, что сервер B будет толькоиспользовать по одному потоку за раз, и вам не нужно ничего добавлять в очередь.
Не уверен, что такое ArrayBlockingQuery
, как и Google.Вы имеете в виду ArrayBlockingQueue
?
ArrayBlockingQueue не блокируется очень долго, поэтому эта информация не очень полезна.Однако вы можете получить блокировку с помощью отражения.
Вы, кажется, слишком обдумываете свое решение.
Вы хотите, чтобы сервер B получал соединение только по одному, и вы используете очередь для этого, однако вы хотите обойти это, но это означает, что вы отказываетесь от своего соединения впринцип времени.