【发布时间】:2011-03-23 18:56:41
【问题描述】:
我正在尝试考虑一些关于 Java 应用程序中的内存分配和多线程的设计,这就是我想知道的:
我有一个具有同步集合的类,例如一个每秒更新几次的列表,但所有更新都发生在该类及其自己的线程中,而不是来自其他线程。但是,我有许多其他线程调用 getCollection() 方法并执行 foreach 以只读方式迭代其内容。这是我不知道的:
如果另一个线程正在迭代同步集合,执行更新的单个线程是否必须等到没有其他线程正在迭代的时间点?
我的第二个问题是,通过执行 .toArray 返回集合的数组副本而不是集合本身似乎是有意义的,但是从内存的角度考虑它不会必须分配一个新的数组是每次集合内容的大小,如果在包含数千个对象的集合上每秒被调用数百次,我不知道这是否有意义。
另外,如果我从不返回集合本身,那么不再需要使列表同步?
不胜感激。谢谢! - 邓肯
【问题讨论】:
标签: java multithreading arrays memory collections