创建ThreadPoolExecutor时,Executors.newFixedThreadPool()默认采用的是LinkedBlockingQueue,如果工作者线程处于忙碌状态,新任务将放入队列中等候,队列满了之后,才可能创建新的线程。
有时我们希望绕开队列,直接分配接收者线程,此时可采用SynchronousQueue,只要当前池的大小还小于最大值,ThreadPoolExecutor就会创建新线程。
SynchronousQueue并不是真正的队列,而是一种管理直接在线程之间移交信息的机制,Executors.newCachedThreadPool()工厂就采用的这种机制。