迭代linkedBlockingQueue并同时删除元素

时间:2014-01-22 19:49:03

标签: java

我的代码如下:

private LinkedBlockingQueue<TrackedOperation> operations = new LinkedBlockingQueue<TrackedOperation>(10000);
        Iterator<TrackedOperation> it = operations.iterator();
        while (it.hasNext()) {
            TrackedOperation op = operations.remove();
                            ...
        }

我的问题是:

迭代器是否总是指向队列的头部并且是预期的行为?

如果我没有意义,那么我的问题是迭代器的行为是什么?我的操作队列和迭代器在上面的代码中是否一致?

3 个答案:

答案 0 :(得分:4)

我在这做什么,

while (!linkedBlockingQueue.isEmpty()) {
    linkedBlockingQueue.remove(); //do what you want to with it
}

答案 1 :(得分:0)

你只能在调用it.next()之后调用它.remove()。 it.next()返回的元素将被it.remove()操作删除。

答案 2 :(得分:0)

接受上面的@assylias回答

你通常会在(真实)E e = queue.take();带阻塞队列。然后中断线程或发送一个特殊项目来打破循环