【问题标题】: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);
    }

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2022-01-18
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多