runnableTaskQueue
(任务队列):用于保存等待执行的任务的 阻塞队列
。可以选择以下几个阻塞队列。
阻塞队列 | 解释 | 补充 |
---|---|---|
ArrayBlockingQueue | 一个由数组结构组成的有界阻塞队列 | FIFO 创建一个公平的阻塞队列 ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(1000,true); |
LinkedBlockingQueue | 一个由链表结构组成的有界阻塞队列 | FIFO 此队列的默认和最大长度为 Integer.MAX_VALUE |
SynchronousQueue | 一个不存储元素的阻塞队列 | 每一个put 操作必须等待一个take 操作,否则不能继续添加元素。它支持公平访问队列。默认情况下线程采用非公平性策略访问队列。使用构造方法SynchronousQueue(true)创建公平性访问的SynchronousQueue,则等待的线程会采用先进先出的顺序访问队列。 SynchronousQueue可以看成是一个传球手,负责把生产者线程处理的数据直接传递给消费者线程。队列本身并不存储任何元素,非常适合传递性场景。 |
PriorityBlockingQueue | 一个支持优先级排序的无界阻塞队列 | 默认情况下元素采取自然顺序升序排列。也可以自定义。 需要注意的是不能保证同优先级元素的顺序。 |
吞吐量
SynchronousQueue
> LinkedBlockingQueue
> ArrayBlockingQueue
Read More
Java中的阻塞队列
-----------------------------------------------------------------------------摘自 书名:Java并发编程的艺术 作者:方腾飞;魏鹏;程晓明