BlockingQueue,也叫阻塞队列,本身是一个继承自Queue的接口,并在Queue的基础上支持了两个附加操作:
这些方法有4中形式:
同时,它也不支持null元素;
BlockingQueue可以限制容量,也可以不限制,如果限制容量,当元素超出此容量时,则无法阻塞的进行put操作,如果不限制容量,则容量大小限制为Integer.MAX_VALUE。
BlockingQueue常用在生产-消费模型应用中。
实现了BlockingQueue的子类有这些:
这是一个由数组支持的BlockingQueue,本质上是一个“有界缓冲区”,拥有固定大小的数组,这样的缓冲区一旦被创建,就不能再增加其容量了。
该实现是按照先进先出的原则对元素进行排序的。
这是一个基于链表的,范围任意的BlockingQueue;
基于链表的队列的吞吐量通常要高于介于数组的队列,但是其在并发应用中,可预知性较低。
也可以在构造的时候传入容量范围,用来防止队列孤独拓展;如果没有指定范围,则容量限制为Integer.MAX_VALUE。
除非插入的节点会使队列超出容量,否则每次插入后都会动态创建节点。
这也是一个无界的阻塞队列,使用了与ProrityQueue相同的顺序规则,并提供了阻塞获取操作的支持。
它虽然逻辑上是无界的,但是如果资源耗尽的时候添加元素,仍然会抛出内存溢出异常。
它不支持null元素;
依赖自然顺序(可用比较器自定义其他顺序规则)的优先级队列不允许插入不可比较的对象。
它的iterator方法获得的迭代器并不保。以特定的顺序遍历元素,如果要保证顺序,建议使用Arrays.sort()方法,
同时它也不保证同样优先级元素的顺序。
这也是一个无界的阻塞对垒,不过它只有在延迟期满的时候才能从中提取元素,具体的使用参考源码,这个类用的比较少,这里就不多说了。
看名字就知道这是一个与同步有关的阻塞队列,其特点是每个插入的操作必须等待另一个线程的对应的溢出操作,反之亦然。
本文发布于:2024-01-31 22:57:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170671305531993.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |