ThreadPoolExecutor 的 workQueue 有哪些
ThreadPoolExecutor 的 workQueue 有哪些
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
在 Java 的 java.util.concurrent
包中,ThreadPoolExecutor
是一个用于管理线程池的强大工具。它可以执行 Runnable
任务,并管理线程的创建、执行和回收。ThreadPoolExecutor
使用一个工作队列(workQueue
)来存储等待执行的任务。以下是几种常用的工作队列类型:
SynchronousQueue
SynchronousQueue 没有容量,每个插入操作必须等待另一个线程的对应移除操作,反之亦然。这个队列通常用于直接交付任务,如果没有可用线程来立即运行任务,那么会尝试创建一个新的线程。
LinkedBlockingQueue
LinkedBlockingQueue 是一个基于链表结构的阻塞队列,它可以选择性地构造成有界或无界的。如果初始化时没有指定容量,它等同于一个容量为 Integer.MAX_VALUE
的队列。通常用于任务队列,当线程池中的线程都在忙时,新任务会在队列中等待。
ArrayBlockingQueue
ArrayBlockingQueue 是一个基于数组结构的有界阻塞队列,这个队列按照先进先出(FIFO)的原则对元素进行排序。必须在构造时指定容量,并且有一个可选的公平性参数来控制线程获取任务的顺序。
PriorityBlockingQueue
PriorityBlockingQueue 是一个支持优先级排序的无界阻塞队列。优先级的判断通过实现 Comparable
接口或者提供 Comparator
来实现。这个队列不会阻塞数据的生产者,但是如果队列为空,消费者可能会被阻塞。
DelayQueue
DelayQueue 是一个使用优先级队列实现的无界阻塞队列,只有在延迟期满时元素才能从队列中取走。这种队列非常适合执行定时任务。
LinkedTransferQueue
LinkedTransferQueue 是一个由链表结构组成的无界阻塞队列。它还包含了 transfer
方法,可以用来直接交付任务给消费者。
LinkedBlockingDeque
LinkedBlockingDeque 是一个基于链表结构的双向阻塞队列,既可以从队列的头部取元素,也可以从尾部取元素,实现了 BlockingDeque
接口。
在选择合适的工作队列时,需要考虑任务的性质、任务产生的速度、消费的速度以及资源的限制等因素。不同类型的队列对于不同的应用场景和需求有着不同的适应性。