【发布时间】:2014-06-10 15:36:44
【问题描述】:
我有一个由多个线程共享的 ArrayList 实例。它在一个同步块中被初始化(因此有一个内存屏障使其对所有线程可见)并且所有线程只能从中读取。 ArrayList 永远不会改变。
我已经在网上阅读了很多帖子,但无论我如何阅读,我仍然不清楚阅读是否安全。如果我在每个线程中从它那里获得一个迭代器,那么迭代器是否会共享一些在迭代时会改变的状态等。我不共享迭代器,每个线程都有它自己的。
无论我如何进行读取,读取是否都是线程安全的?
【问题讨论】:
-
只读总是线程安全的。共享迭代器可能不是线程安全的,因为每个迭代器都有状态,并且从迭代器中读取会改变该状态,但如果每个线程都有自己的迭代器,那可能没问题。
-
@user3580294:
...it's probably OK...是我问这个的原因。是肯定的还是可能好的? :) -
哦,好吧,绝对没问题。只要您不共享更改状态并且不更改共享状态,就可以了。所以不要使用
Iterator#remove()。 -
如果每个线程都有自己的迭代器,那没关系。但是,您不能在线程之间共享单个迭代器
标签: java multithreading collections thread-safety