当没有空闲核心线程时,新来任务会加入到此队列排队,队列满会创建救急线程执行任务
比较常见的有4个,用的最多是ArrayBlockingQueue和LinkedBlockingQueue
- ArrayBlockingQueue:基于数组结构的有界阻塞队列,FIFO。
- LinkedBlockingQueue:基于链表结构的有界阻塞队列,FIFO。
- DelayedWorkQueue :是一个优先级队列,它可以保证每次出队的任务都是当 前队列中执行时间最靠前的
- SynchronousQueue:不存储元素的阻塞队列,每个插入操作都必须等待一个移出操作。
ArrayBlockingQueue的LinkedBlockingQueue区别:
ArrayBlockingQueue
- 强制有界
- 底层是数组
- 提前初始化 Node 数组
- Node需要是提前创建好的,直接做赋值操作
- 一把锁 ,ArrayBlockingQueue只有一把锁,读和写公用,性能相对于LinkedBlockingQueue差一些
LinkedBlockingQueue
- 默认无界(Integer.MAX_VALUE),支持有界
- 底层是链表
- 延迟加载,创建节点的时候添加数据
- 入队会生成新 Node
- 两把锁(头尾) ,LinkedBlockingQueue读和写各有一把锁,性能相对较好