0

在多线程环境中,我有一个带有静态 ArrayList 的单例。

假设一个线程获取实例并对 ArrayList 执行“for”循环。只是阅读。没有更新。这可能需要一些时间才能完成。发生这种情况时,另一个线程会更新 ArrayList。

循环(第一个线程)会发生什么?理想情况下,我希望“for”循环以“旧”数据完成,如果我再次获得实例,则获得新的数据集。

在这种情况下,诀窍是不使用 volatile 吗?或者从静态 ArrayList 为“for”循环创建一个新的 ArrayList?或者... ?

4

2 回答 2

1

看起来使用 CopyOnWriteArrayList 可能是一种方法,尽管内存成本很高

http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/CopyOnWriteArrayList.html

于 2013-05-10T16:00:44.100 回答
-3

最好在多线程环境中使用vector而不是ArrayList。vector与ArrayList的讨论: http ://www.javaworld.com/javaqa/2001-06/03-qa-0622-vector.html

于 2013-05-10T16:05:37.283 回答