Java LinkedBlockingDeque的迭代器(iterator())方法
LinkedBlockingDeque 简介
LinkedBlockingDeque是Java提供的一个线程安全的双向队列,支持添加和移除元素的操作,这些操作可以在队列两端进行。这个类可以自动解决多线程同步的问题,是一个非常实用的类。
迭代器(iterator())方法介绍
LinkedBlockingDeque类提供了一个迭代器方法iterator(),该方法可以获取到LinkedBlockingDeque中的元素并逐个迭代处理。
public abstract class LinkedBlockingDeque<E>
extends AbstractQueue<E>
implements BlockingDeque<E>, java.io.Serializable {
…
public Iterator<E> iterator() {
return new Itr();
}
…
}
该方法会返回一个实现Iterator
迭代器(iterator()) 方法的使用示例
以LinkedBlockingDeque的遍历为例,代码如下:
LinkedBlockingDeque<String> deque = new LinkedBlockingDeque<String>();
//添加元素到队列头部
deque.addFirst("Tom");
deque.addFirst("Jerry");
deque.addFirst("Mickey");
//获取迭代器对象,并循环遍历元素
Iterator<String> iterator = deque.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
代码运行结果如下:
Mickey
Jerry
Tom
迭代器在多线程下的使用
由于LinkedBlockingDeque是一个线程安全的队列,所以在多线程下使用迭代器也是非常安全的。
//定义LinkedBlockingDeque队列
LinkedBlockingDeque<Integer> deque = new LinkedBlockingDeque<Integer>();
//添加元素到队列中
deque.addLast(1);
deque.addLast(2);
deque.addLast(3);
deque.addLast(4);
deque.addLast(5);
//获取迭代器对象,并循环遍历元素
Iterator<Integer> iterator = deque.iterator();
//开启线程,往队列头部添加元素
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
deque.addFirst(0);
deque.addFirst(-1);
}
});
thread.start();
//循环遍历
while (iterator.hasNext()){
Integer num = iterator.next();
System.out.println(num);
}
上述代码,在一个线程中往队列尾部添加元素,在另外一个线程中往队列头部添加元素,在第三个线程中循环遍历队列中的元素,结果如下:
1
2
3
4
5
结果表明在多线程下使用迭代器是非常安全的,不会出现线程间的冲突和安全问题。
结论
LinkedBlockingDeque的迭代器方法(iterator())是一种快速、简单、安全的遍历LinkedBlockingDeque中元素的方式。在多线程下使用该方法不会出现线程安全问题。使用迭代器可以方便地遍历并处理队列中的元素,是一种非常实用的Java编程方法。
极客笔记