Java ConcurrentLinkedQueue与实例
Java中的 ConcurrentLinkedQueue 类是Java Collection Framework的一部分。它属于 java.util.concurrent 包。它是在JDK 1.5中引入的。它被用来在LinkedList的帮助下并发地实现队列。它是一个 无界线程安全的 队列实现,以FIFO(先进先出)的方式在队列的尾部插入元素。当一个无界的队列被许多线程共享时,可以使用它。该类不允许出现空元素。迭代器是弱一致性的。该类及其迭代器实现了 Queue 和 Iterator 接口的所有可选方法。
类层次结构 。
声明
public class ConcurrentLinkedQueue<E> extends AbstractCollection<E> implements Queue<E>, Serializable
这里, E 是这个集合所维护的元素的类型。
ConcurrentLinkedQueue的构造函数
为了构造一个ConcurrentLinkedQueue,我们需要从 java.util.ConcurrentLinkedQueue 中导入它 。
1.ConcurrentLinkedQueue() : 这个构造函数用来构造一个空队列。
ConcurrentLinkedQueue<E> clq = new ConcurrentLinkedQueue<E>()
**2.ConcurrentLinkedQueue(Collection
ConcurrentLinkedQueue<E> clq = new ConcurrentLinkedQueue<E>(Collection<E> c)
下面是一个示例程序,说明Java中的ConcurrentLinkedQueue。
例1:
输出
例2:
输出
基本操作
1.添加元素
为了添加元素,ConcurrentLinkedQueue提供了两个方法。
- add() 它插入元素,作为参数传递到这个并发连接队列的尾部。如果插入成功,该方法返回True。ConcurrentLinkedQueue是无界的,所以这个方法不会抛出IllegalStateException或返回false。
- addAll() 它插入集合的所有元素,作为参数传递到ConcurrentLinkedQueue的末端。插入元素的顺序与集合的迭代器返回的顺序相同。
输出
2.移除元素
ConcurrentLinkedQueue的remove(Object o)方法是用来移除指定元素的单个实例的,如果它是存在的。它删除了一个元素 e ,使得o.e equals(e)。如果这个ConcurrentLinkedQueue包含指定的元素,它将返回true,否则它将返回false。
输出
3.迭代元素
ConcurrentLinkedQueue的iterator()方法用来返回一个与该ConcurrentLinkedQueue相同的元素的迭代器,其顺序是正确的。该方法返回的元素按照从头(head)到尾(tail)的顺序。返回的迭代器是弱一致性的。
输出
4.访问元素
Queue 提供的 peek() 和 element() 方法用于访问 ConcurrentLinkedQueue 的元素。
element()方法与peek()方法的不同之处在于,如果这个队列是空的,它会抛出一个异常。
输出
ConcurrentLinkedQueue的方法
方法 | 描述 |
---|---|
add(E e) | 在这个队列的尾部插入指定的元素。 |
addAll(Collection c) | 按照指定集合的迭代器返回的顺序,将指定集合中的所有元素追加到这个队列的尾部。 包含(Object o) | 如果这个队列包含指定的元素,返回true。 forEach(Consumer action) | 对Iterable的每个元素执行给定的动作,直到所有的元素都被处理完,或者该动作抛出一个异常。 isEmpty() | 如果这个队列不包含任何元素,返回true。 iterator() | 以适当的顺序返回这个队列中的元素的迭代器。 offer(E e) | 在这个队列的尾部插入指定的元素。 remove(Object o) | 从这个队列中删除指定元素的一个实例,如果它存在的话。 removeAll(Collection c) |
删除这个集合中也包含在指定集合中的所有元素(可选操作)。 |
removeIf(Predicate filter) | 删除此集合中满足给定谓词的所有元素。 retainAll(Collection c) |
只保留此集合中包含在指定集合中的元素(可选操作)。 |
size() | 返回这个队列中元素的数量。 |
spliterator() | 返回这个队列中的元素的Spliterator。 |
toArray() | 返回一个包含该队列中所有元素的数组,并按适当的顺序排列。 |
toArray(T[] a) | 返回一个包含该队列中所有元素的数组,并以适当的顺序排列;返回的数组的运行时类型是指定数组的类型。 |
java.util.AbstractQueue类中声明的方法
方法 | 描述 |
---|---|
清除() | 移除队列中的所有元素。 |
element() | 检索,但不删除这个队列的头部。 |
remove() | 检索并删除此队列的头部。 |
java.util.AbstractCollection类中声明的方法
方法 | 描述 |
---|---|
containsAll(Collection c) | 如果这个集合包含指定集合中的所有元素,则返回true。 toString() | 返回这个集合的一个字符串表示。 ### java.util.Collection接口中声明的方法 方法 | 描述 |
如果这个集合包含了指定集合中的所有元素,返回true。 |
equals(Object o) | 将指定的对象与这个集合进行比较,看是否相等。 |
哈希代码() | 返回此集合的哈希代码值。 |
parallelStream() | 返回一个以该集合为源的可能的并行流。 |
stream() | 返回一个以该集合为源的顺序流。 |
toArray(IntFunction<T[]> generator) | 返回一个包含此集合中所有元素的数组,使用提供的生成器函数来分配返回的数组。 |
接口java.util.Queue中声明的方法
方法 | 描述 |
---|---|
元素() | 检索,但不删除这个队列的头部。 |
peek() | 检索但不删除这个队列的头部,如果这个队列是空的,则返回null。 |
poll() | 检索并删除这个队列的头部,如果这个队列是空的,则返回null。 |
remove() | 检索并删除此队列的头部。 |
参考资料 : https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ConcurrentLinkedQueue.html