如果我将对象添加到队列中,我会得到ConcurrentModificationException吗?

时间:2017-03-02 10:26:55

标签: java collections queue concurrentmodification

我不确定如何形成这个问题..

基本上我有这段代码:

java.util.Queue myQueue;

...

myQueue.stream().filter(particle -> particle instanceof ParticleDigging).forEach(particle -> {
     myQueue.add(new ParticleSmoke());
});

现在我想知道的是它是否会在某个时候抛出ConcurrentModificationException。

甚至可以使用.stream()抛出异常吗?

1 个答案:

答案 0 :(得分:1)

您可以为队列使用ConcurrentLinkedQueue实现。 如果查看java文档,它们不会抛出concurrentModificationException,因为它在内部使用了迭代器。

ConcurrentLinkedQueue

Queue<Particle> myQueue = new ConcurrentLinkedQueue<>();

如果转换为流,则流会生成具有相同效果的分裂器:

default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }