ThreadPoolExecutor构造器中BlockingQueue
JDK8中的队列实现
SynchronousQueue
直接提交的队列
默认使用: newCachedThreadPool
该队列没有容量,只有一个元素存在,每一个插入操作都要等待对应的删除操作,每一个删除操作也需要等待对于的插入操作
需要注意最大线程数的设置,避免操作被拒绝,是一个公平队列,先进先出
ArrayBlockingQueue
有界堵塞队列
使用数组实现,任务队列放满之后才会将线程池从corePoolSize进行提升,注重保持在核心数量,是一个公平队列,先进先出
LinkedBlockingQueue
有界堵塞队列
默认使用: newFixedThreadPool、newSingleThreadExecutor
使用链表实现,默认大小是Integer.MAX_VALUE,所以最好手动指定大小,每个提交的任务都会储存在一个node对象中,实现了锁分离,添加和移除任务各有一把锁,是一个公平队列,先进先出
DelayedWorkQueue
无界堵塞队列
默认使用: ScheduledThreadPoolExecutor、newSingleThreadScheduledExecutor
可以按照任务优先级执行,采用消费者-生产者模式进行消费
PriorityBlockingQueue
优先任务队列
是一种特殊的无界队列,可以按照任务优先级执行,元素可以实现Comparable接口,不允许为null
DelayQueue
无界堵塞队列
每个元素都会有一定的延时,然后释放
LinkedBlockingDueue
有界堵塞队列
使用链表实现,允许从双端进行插入和删除,默认大小是Integer.MAX_VALUE,所以最好手动指定大小,每个提交的任务都会储存在一个node对象中,实现了锁分离,添加和移除任务各有一把锁,任务队列放满之后才会将线程池从corePoolSize进行提升,注重保持在核心数量,是一个公平队列,先进先出
LinkedTransferQueue
无界堵塞队列
使用链表实现,采用消费者-生产者模式进行消费,是一个公平队列,先进先出