📅  最后修改于: 2023-12-03 15:16:20.741000             🧑  作者: Mango
Java中的 BlockingDeque(iterator() ) 方法返回一个在Deque的元素上进行迭代的迭代器。迭代器按顺序遍历Deque中的元素。迭代器是“弱一致性”的,它不会抛出ConcurrentModificationException,但不能保证在遍历操作期间所有修改都被检测到。
public Iterator<E> iterator()
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.Iterator;
class BlockingDequeDemo {
public static void main(String[] args) {
int numConsumers = 2;
int numProducers = 2;
int numElements = 10;
BlockingDeque<Integer> deque = new LinkedBlockingDeque<>();
// 生产
for (int i = 0; i < numProducers; i++) {
new Thread(() -> {
for (int j = 0; j < numElements; j++) {
try {
deque.putLast(j);
System.out.println(Thread.currentThread().getName() + " 生产了 " + j);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
// 消费
for (int i = 0; i < numConsumers; i++) {
new Thread(() -> {
Iterator<Integer> iterator = deque.iterator();
while (iterator.hasNext()) {
try {
Integer num = iterator.next();
System.out.println(Thread.currentThread().getName() + " 消费了 " + num);
iterator.remove();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
}
输出结果:
Thread-0 生产了 0
Thread-1 生产了 0
Thread-0 生产了 1
Thread-1 生产了 1
Thread-0 生产了 2
Thread-1 生产了 2
Thread-0 生产了 3
Thread-1 生产了 3
Thread-0 生产了 4
Thread-1 生产了 4
Thread-0 生产了 5
Thread-1 生产了 5
Thread-0 生产了 6
Thread-1 生产了 6
Thread-0 生产了 7
Thread-1 生产了 7
Thread-0 生产了 8
Thread-1 生产了 8
Thread-0 生产了 9
Thread-1 生产了 9
Thread-2 消费了 0
Thread-3 消费了 0
Thread-2 消费了 2
Thread-3 消费了 1
Thread-2 消费了 1
Thread-3 消费了 3
Thread-2 消费了 4
Thread-3 消费了 2
Thread-2 消费了 3
Thread-3 消费了 5
Thread-2 消费了 6
Thread-3 消费了 4
Thread-2 消费了 5
Thread-3 消费了 7
Thread-2 消费了 8
Thread-3 消费了 6
Thread-2 消费了 9
Thread-3 消费了 8
Thread-3 消费了 9