Scala多线程迭代器

问题描述 投票:1回答:1

我正在使用scala Iterator进行synchronized块中的等待循环:

anObject.synchronized {
    if (Try(anObject.foo()).isFailure) {
        Iterator.continually { 
            anObject.wait()
            Try(anObject.foo()) 
        }.dropWhile(_.isFailure).next()
    }
    anObject.notifyAll()
}

Iterator与并发和多线程一起使用是否可以接受?如果没有,为什么?然后使用什么以及如何使用?


有一些细节,如果重要的话。 anObject是可变队列。队列中有多个生产者和消费者。因此,上面的方框是此类生产者或消费者的代码。 anObject.foo是一种通用的简化功能声明,可以将数据入队(对于生产者)或出队(对于消费者)到/从队列中。

multithreading scala iterator thread-safety synchronized
1个回答
2
投票
Iterator在内部是可变的,因此,如果在多线程环境中使用它,则必须考虑到这一点。如果您保证自己不会陷入这种情况,例如

    2个线程检查hasNext()
© www.soinside.com 2019 - 2024. All rights reserved.