2014-10-27 27 views
2

所以我知道同步一个ArrayList,为了同步需要使用在不同的类

Collections.SynchronizedList(new ArrayList()); 

不过的ArrayList什么,如果同步的ArrayList是一个类,我想有一个refernce在其他几个类中,包含将添加到其中的线程的多个其他类。我会做类似

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

还是会用正确的方法是

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

也有在我会遍历列表的方式有什么区别呢,还是一样的,如果所有的添加和阅读包含在一个类?

回答

1

不要紧哪个类的列表包含在 - 同步是用于控制访问读取和写入到从多个线程(再次,无论类的它包含在)该列表。一旦你将其包装在Collections.synchronizedList的电话中,再次执行操作就没有意义了。

为清楚起见(根据你的问题),你的代码应该是这样的:

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

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

这里,referenceToList只是一个指向同一个列表mainList点,这已读/写访问同步。

作为说明,还有其他List实现是专为并发访问的情况下,如CopyOnWriteArrayList