gpt4 book ai didi

java - 如何正确同步多个线程访问的列表?

转载 作者:行者123 更新时间:2023-11-30 01:40:57 25 4
gpt4 key购买 nike

我有一个列表,每 20 毫秒在一个线程上更新一次,并每 16 毫秒在另一个线程上读取一次。我听说在这种情况下,通常最好使用同步列表而不是 copyonwritearraylist,对吗?

我应该将此列表初始化为

List<Object> list = Collections.synchronizedList(new ArrayList<Object>());

或者我应该将其设为常规列表,然后每次我想从中读取时使用诸如

之类的方法
public List<Object> synList(ArrayList<Object> list) {
return Collections.synchronizedList(list);
}

抱歉,如果这很微不足道,我真的不确定。非常感谢

最佳答案

I have a list that is being updated on one thread every 20 ms and being read on another thread every 16 ms. I have heard that in a case such as this it is generally better to use a synchronized list and not a copyonwritearraylist, correct?

是的。

CopyOnWriteArrayList仅当读取次数多于写入次数时才真正有用,因此复制列表的成本会被更快的读取速度所抵消。

您的写入和读取次数大致相同,因此这不适用。

Should I initialize this list originally as List<Object> list = Collections.synchronizedList(new ArrayList<Object>()); ? or should I make it a regular list and then every time i want to read from it use a method...

第二个没用。

仅当对基础列表的所有访问也在同一事物上同步时,同步列表才有用;基本上,使用它的唯一安全方法是在创建时立即包装列表,即第一种方法。

关于java - 如何正确同步多个线程访问的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60029860/

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