Я вижу эти реализации BlockingQueue и не могу понять различий между ними. Мой вывод на данный момент:
Итак, когда мне когда-нибудь понадобится SynchronousQueue ? Производительность этой реализации лучше, чем у LinkedBlockingQueue ?
Чтобы усложнить задачу ... почему Executors.newCachedThreadPool использует SynchronousQueue, тогда как другие ( Executors.newSingleThreadExecutors.newSingleThreadExecut и Исполнители. newFixedThreadPool ) использовать LinkedBlockingQueue?
EDIT
Первый вопрос решен. Но я до сих пор не понимаю, почему Executors.newCachedThreadPool использует SynchronousQueue, когда другие ( Executors.newSingleThreadExecutor и Executors.newFixedThreadPool] используют LinkedBlockingQueue )
Я получаю, что с SynchronousQueue производитель будет заблокирован, если нет свободного потока. Но поскольку количество потоков практически не ограничено (при необходимости будут созданы новые потоки), этого никогда не произойдет. Так почему он должен использовать SynchronousQueue?