线程池的工作队列参数是:
BlockingQueue<Runnable> workQueue
BlockingQueue是一个接口,有四个常见的实现子类:
-
ArrayBlockingQueue: 基于数组的有界阻塞队列,它的容量是固定的,当队列已满时,后续的插入操作会被阻塞。
-
LinkedBlockingQueue: 基于链表的可选有界或无界阻塞队列,它可以选择固定容量或无限容量。当队列容量达到上限时,后续的插入操作会被阻塞。
-
PriorityBlockingQueue: 基于优先级的无界阻塞队列,它会根据元素的优先级进行排序。当队列为空时,获取操作会被阻塞。
-
SynchronousQueue: 一个不存储元素的阻塞队列,每个插入操作必须等待一个相应的删除操作,反之亦然。当队列中存在未被消费的元素时,插入操作会被阻塞。
这些实现类在判断队列已满时采用不同的机制:
- ArrayBlockingQueue和LinkedBlockingQueue在队列已满时,后续的插入操作会被阻塞。
- PriorityBlockingQueue是无界队列,不会满。
- SynchronousQueue是一个特殊的阻塞队列,它不存储元素,因此不会满,而是通过等待插入和删除操作来实现阻塞。