java - 返回 Java 数组与集合

标签 java multithreading arrays memory collections

我正在尝试思考有关 Java 应用程序中内存分配和多线程的一些设计,这就是我想知道的:

我有一个类,它有一个同步集合,比如一个每秒更新几次的列表,但所有更新都发生在该类和它自己的线程中,而不是来自其他线程。但是我有许多其他线程调用 getCollection() 方法并执行 foreach 以只读方式迭代其内容。这是我不知道的:

如果另一个线程正在迭代同步集合,执行更新的单个线程是否必须等到没有其他线程正在迭代的时间点?

我的第二个问题是,通过执行 .toArray 返回集合的数组副本而不是集合本身似乎是有意义的,但是从内存的角度考虑它不会分配一个新的数组每次都是集合内容的大小,如果每秒在一个包含数千个对象的集合上调用数百次,我不知道是否有意义。

此外,如果我从不返回集合本身,那么是否不再需要使列表同步?

将不胜感激任何意见。谢谢! ——邓肯

最佳答案

if another thread is iterating the synchronized colletion will the single thread that performs the updates have to wait until a point in time when no other threads are iterating?

如果您谈论的是同步(非并发)集合,那么是的。 至于第二个问题, 看起来像是 java.util.concurrent.CopyOnWriteArrayList 的真实用例。

关于java - 返回 Java 数组与集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410190/

相关文章:

c++ - 如何获取线程状态(例如挂起)、内存+CPU使用率、启动时间、优先级等

c++ - SendNotifyMessage 不发送正确的消息

vb.net - VB.NET 中的委托(delegate)中的委托(delegate)

javascript - 将数组从一个 UseState 传递到另一个 UseState

java - 单击菜单栏项目后尝试启动新的 Tic Tac Toe 游戏

java - 从 56 位二进制字符串创建 DES key

php - 使用点语法从多维数组中获取值

javascript - 对象名称可以是数字吗?

java - 尝试从数据库白色 EhCache 引导过程加载数据时出现异常

Java 流 : Replacing groupingBy and reducing by toMap