所以我正在开发一个多线程java应用程序,我有这个问题:
List<Integer> mlist = Collections.synchronizedList(new ArrayList<Integer>());
public void addStuff(int a){
mlist.add(a) // mlist is a synchronized list
}
public void traverseArray(){
synchronized(mlist){
// traversing mlist using normal for loop
}
}
在上面的代码中,如果一个线程试图使用addStuff()
向mlist添加一个元素,另一个线程将被允许进入TraverseArray()
方法中的同步块吗?反之亦然如果一个线程使用TraverseArray()
方法中的同步块遍历列表,是否允许另一个线程使用addStuff()
方法向列表添加元素?
需要在列表上同步
用户必须手动同步返回的数据
List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
因此可以推断,只要上述代码在同步块中,其他线程的修改就会被阻塞。