【发布时间】:2021-03-02 18:08:34
【问题描述】:
如果我有一个在多个线程之间共享的Iterator,每个线程都调用:
// Inside a thread
int myValue = iterator.next();
可能的结果是什么?
(忽略 next() 可能抛出 NoSuchElementException 的事实)如果迭代器是 ArrayList 上的迭代器,是否有可能多个线程最终在 myValue 变量中得到相同的值?
下面的代码是解决此问题的一种方法吗? (除了使用此处描述的 Java 8 流Passing a List Iterator to multiple Threads in Java)。
// Inside a thread
int myValue;
synchronized(iterator)
{
myValue = iterator.next();
}
【问题讨论】:
-
迭代器不应在线程之间共享。在另一个线程可能正在修改的集合上使用迭代器通常不是线程安全的
标签: java multithreading iterator thread-safety