线程池任务队列

深碍√TFBOYSˉ_ 2024-03-17 10:55 121阅读 0赞

runnableTaskQueue(任务队列):用于保存等待执行的任务的 阻塞队列 。可以选择以下几个阻塞队列。































阻塞队列 解释 补充
ArrayBlockingQueue 一个由数组结构组成的有界阻塞队列 FIFO

创建一个公平的阻塞队列
ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(1000,true);

创建一个非公平的阻塞队列
ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(1000);
LinkedBlockingQueue 一个由链表结构组成的有界阻塞队列 FIFO

此队列的 默认最大长度Integer.MAX_VALUE
SynchronousQueue 一个不存储元素的阻塞队列 每一个put操作必须等待一个take操作,否则不能继续添加元素。

默认情况下线程采用非公平性策略访问队列。
SynchronousQueue unfair = new SynchronousQueue();
使用构造方法SynchronousQueue(true)创建公平性访问的SynchronousQueue,则等待的线程会采用先进先出的顺序访问队列。
SynchronousQueue fair = new SynchronousQueue(true);

SynchronousQueue可以看成是一个传球手,负责把生产者线程处理的数据直接传递给消费者线程。队列本身并不存储任何元素,非常适合传递性场景。
PriorityBlockingQueue 一个支持优先级排序无界阻塞队列 默认情况下元素采取自然顺序升序排列。也可以自定义。
需要注意的是不能保证同优先级元素的顺序。

吞吐量

SynchronousQueue > LinkedBlockingQueue > ArrayBlockingQueue


Read More

Java中的阻塞队列

-——————————————————————————————————————摘自 书名:Java并发编程的艺术 作者:方腾飞;魏鹏;程晓明

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读