所以我正在开发一个多线程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()
是否允许另一个线程进入同步块TraverseArray()
方法?
或相反亦然
如果线程正在使用同步块遍历列表TraverseArray()
方法,是否允许另一个线程使用以下方法将元素添加到列表中addStuff()
method?
列表上同步的是required by the 文档.
用户必须手动同步返回的
迭代时列出:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
因此,您可以推断,只要上述代码位于同步块中,其他线程的修改就会被阻止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)