- 我永远不需要使用SynchronousQueue
- LinkedBlockingQueue保证先进先出,如果想让BlockingQueue也变成先进先出,则必须创建时传入true参数
- SynchronousQueue破坏了大多数集合方法(contains、size等)
让问题更加复杂的是,为什么Executors.newCachedThreadPool在使用SynchronousQueue,而其他线程池(Executors.newSingleThreadExecutor和Executors.newFixedThreadPool)则使用LinkedBlockingQueue?
我的理解是,使用SynchronousQueue时,如果没有自由线程,则生产者将被阻塞。但是由于线程数量实际上是无限的(需要时将创建新线程),因此这永远不会发生。那么为什么要使用SynchronousQueue呢?