📌  相关文章
📜  Java中的 BlockingDeque iterator() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:16:20.741000             🧑  作者: Mango

Java中的 BlockingDeque iterator() 方法及示例

简介

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