SynchronousQueue的疑问
缓冲队列采用 SynchronousQueue,它将任务直接交给线程处理而不保持它们。如果不存在可用于立即运行任务的线程(即线程池中的线程都在工作),则试图把任务加入缓冲队列将会失败,因此会构造一个新的线程来处理新添加的任务,并将其加入到线程池中。直接提交通常要求无界 maximumPoolSizes(Integer.MAX_VALUE) 以避免拒绝新提交的任务。newCachedThreadPool采用的便是这种策略。
这是网上找的关于SynchronousQueue的一段话,我的疑问有2个:
1. 他说的“缓冲队列采用 SynchronousQueue,它将任务直接交给线程处理而不保持它们”,这个不保持它们是什么意思,SynchronousQueue这个缓冲队列到底里面会存放任务吗,什么情况会存放,又什么时候被取出
2. 他说的“如果不存在可用于立即运行任务的线程(即线程池中的线程都在工作),则试图把任务加入缓冲队列将会失败”,这句话反过来理解,如果存在可用于立即运行任务的线程,那就会成功把任务加入SynchronousQueue吗?既然有空闲的线程,直接让线程运行任务不就完了吗,还需要把任务加入SynchronousQueue吗?