队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
顶级接口为java.util.queue.
java.util包中,java.util.concurrent包中有多种实现。其简易类图如下:
非阻塞队列与阻塞队列,它们都是线程安全的(即不能有一个以上的线程同时对队列进行入队或者出队操作),无需担心在多线程并发环境所带来的不可预知的问题。阻塞与否在于是否有界,也就是在初始化时有没有给它一个默认的容量大小。
对于阻塞有界队列来讲,如果队列满了的话,则任何线程都会阻塞不能进行入队操作,反之队列为空的话,则任何线程都不能进行出队操作。

对于非阻塞无界队列来讲则不会出现队列满或者队列空的情况。它们俩都保证线程的安全性。
- ConcurrentLinkedQueue:是一个基于链接节点的无界线程安全队列
- PriorityQueue:是一个基于数组实现的队列
- ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列。
- LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列。
- PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列。
- DealyQueue:一个使用优先级队列实现的无界阻塞队列。
- SynchronousQueue:一个不存储元素的阻塞队列。
- LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
- LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
源码如下:
————————自己实现的一个阻塞队列—————————————————————————-
测试的main方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/202923.html