gpt4 book ai didi

java - 同步不同类中的 ArrayList

转载 作者:行者123 更新时间:2023-11-30 11:13:02 26 4
gpt4 key购买 nike

所以我知道为了同步一个arrayList你需要使用

 Collections.SynchronizedList(new ArrayList());

但是如果同步 arrayList 在一个类中并且我想在其他几个类中引用它,那么多个其他类包含将添加到它的线程。我会做类似的事情吗

List referenceToList = OtherClass.mainList;   
// inside OtherClass would be List<String>mainList
= Collections.sychronizedList(new ArrayList<String>());

或者正确的方式是

List referenceToList = Collections.synchronizedList(OtherClass.mainList);

另外,我遍历列表的方式有什么不同,还是说所有的添加和读取都包含在一个类中?

最佳答案

列表包含在哪个类中并不重要 - 同步用于控制从多个线程读取和写入该列表的访问(同样,无论它包含在哪个类中)。一旦您将其包装在对 Collections.synchronizedList 的调用中,就没有必要再做一次。

为清楚起见(根据您的问题),您的代码如下所示:

class OtherClass {
public static List mainList = Collections.synchronizedList(new ArrayList());
}

class RandomClass {
public static List referenceToList = OtherClass.mainList;
}

这里,referenceToList 只是指向与mainList 指向的同一个列表的指针,它具有同步的读/写访问权限。

请注意,还有其他 List 实现是为并发访问情况而设计的,例如 CopyOnWriteArrayList .

关于java - 同步不同类中的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579436/

26 4 0