java中的队列有哪些,有啥区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的队列有哪些,有啥区别相关的知识,希望对你有一定的参考价值。

阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列.
从5.0开始,JDK在java.util.concurrent包里提供了阻塞队列的官方实现。尽管JDK中已经包含了阻塞队列的官方实现,但是熟悉其背后的原理还是很有帮助的。一下是阻塞队列的实现:
public class BlockingQueue

private List queue = new LinkedList();

private int limit = 10;

public BlockingQueue(int limit)

this.limit = limit;



public synchronized void enqueue(Object item)

throws InterruptedException

while(this.queue.size() == this.limit)

wait();



if(this.queue.size() == 0)

notifyAll();



this.queue.add(item);



public synchronized Object dequeue()

throws InterruptedException

while(this.queue.size() == 0)

wait();



if(this.queue.size() == this.limit)

notifyAll();



return this.queue.remove(0);



参考技术A

阻塞队列、普通队列,非阻塞队列。

阻塞队列与普通队列的而区别在于,当队列是空时,从队列中获取元素的操作会被阻塞,或则当队列是满的时,往队列中增加元素会被阻塞,试图从空的队列中取元素的线程或从满的队列中添加元素的线程同样会被阻塞。

队列的两个基本操作是inserting(插入)一个数据项,即把一个数据项放入队尾,另一个是removing(移除)一个数据项,即移除队头的数据项。这类似于电影爱好者排队买票时先排到队尾,然后到达队头买票后离开队列。

栈中的插入和移除数据项方法的命名是很标准,称为push和pop。队列的方法至今没有标准化的命名。“插入”可以称为put、add或enque,而“删除”可以叫delete、get或deque。插入数据项的队尾,也可以叫作back、tail或end。而移除数据项的队头,也可以叫head。下面将使用insert、remove、front和rear。

插入将值插入队尾,同时队尾箭头增加一,指向新的数据项。

以上是关于java中的队列有哪些,有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

GCD 中的“全局队列”和“主队列”有啥区别?

GCD 中的 Dispatch_barrier_async 和串行队列,它们之间有啥区别?

java里map底层是通过啥实现的?队列和键值有啥区别

死信队列和退出队列有啥区别?

优先级队列和队列有啥区别?

消息通道和消息队列本身有啥区别?