LinkedBlockingQueue
是一个基于单链表实现的阻塞队列,通过构造器参数可以设定队列容量的大小,如果没有设定默认为Integer.MAX_VALUE
,队列中元素顺序遵循FIFO先进先出的规则。
基本属性
1 | /** |
入队
1 | public void put(E e) throws InterruptedException { |
出队
1 | public E take() throws InterruptedException { |
总结
相比于ArrayBlockingQueue
LinkedBlockingQueue
出队和入队操作分别使用不同的锁 避免了相互阻塞的现象;ArrayBlockingQueue
出入队使用的是同一把锁 出入队会互相阻塞 效率低下
两者都是有界队列,若队列长度固定 出队速度小于入队速度 会导致大量线程阻塞LinkedBlockingQueue
初始化时如果不指定容量,默认为Integer.MAX_VALUE
,若出队速度小于入队速度 会导致队列特别长 占用大量内存