gpt4 book ai didi

java - 返回 Java 数组与集合

转载 作者:搜寻专家 更新时间:2023-11-01 04:01:34 26 4
gpt4 key购买 nike

我正在尝试思考有关 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com