【问题标题】:Will I get ConcurrentModificationException if I add objects to a Queue as I'm going through it?如果我在处理队列时将对象添加到队列中,我会得到 ConcurrentModificationException 吗?
【发布时间】:2017-03-02 10:26:55
【问题描述】:
我不知道如何形成问题..
基本上我有这个代码:
java.util.Queue myQueue;
...
myQueue.stream().filter(particle -> particle instanceof ParticleDigging).forEach(particle -> {
myQueue.add(new ParticleSmoke());
});
现在我想知道的是它是否会在某个时候抛出 ConcurrentModificationException。
它甚至可以用 .stream() 抛出异常吗?
【问题讨论】:
标签:
java
collections
queue
concurrentmodification
【解决方案1】:
您可以为队列使用 ConcurrentLinkedQueue 实现。
如果您查看 java 文档,它们不会抛出 concurrentModificationException,因为它在内部使用了迭代器。
ConcurrentLinkedQueue
Queue<Particle> myQueue = new ConcurrentLinkedQueue<>();
如果您转换为流,则流会生成一个具有相同效果的拆分器:
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}