单线程在多线程环境中更新

时间:2013-05-10 15:44:32

标签: java

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

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

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

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

2 个答案:

答案 0 :(得分:1)

看起来使用CopyOnWriteArrayList可能是内存成本高昂的方法

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

答案 1 :(得分:-3)

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