我正在使用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
是一种通用的简化功能声明,可以将数据入队(对于生产者)或出队(对于消费者)到/从队列中。
Iterator
在内部是可变的,因此,如果在多线程环境中使用它,则必须考虑到这一点。如果您保证自己不会陷入这种情况,例如hasNext()