2017-03-02 19 views
0

我不知道如何形成的问题..如果我在通过它时将对象添加到队列,我会得到ConcurrentModificationException吗?

基本上,我有这样的代码:

java.util.Queue myQueue; 

... 

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

现在我想知道的是,如果它会在某个点抛出ConcurrentModificationException。

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

+1

不知道,但我不会试图改变一个集合,同时它迭代 –

回答

1

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

ConcurrentLinkedQueue

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

如果转换到一个流,然后流使得它具有相同的效果spliterator:

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