Если мы хотим реализовать пул ресурсов, такой как пул соединений с базой данных. Какую параллельную коллекцию вы будете использовать? BlockingQueue
или Semaphore
?
Для BlockingQueue
, как и в шаблоне проектирования производитель-потребитель, производитель поместит все соединения в очередь, а потребитель возьмет следующее доступное соединение из очереди.
Для Semaphore
вы указываете семафор для размера пула и получаете разрешение, пока не достигнете размера пула, и ждете, пока любой из них освободит разрешение и вернет ресурс в пул.
Какой из них проще и легче? и каков сценарий, когда мы можем использовать только один, но не другой?