[英]Does synchronized block prevent other threads from making insertions into a synchronized list?
所以我正在开发一个多线程 java 应用程序,我有这个问题:
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());
}
因此,只要上述代码在同步块中,您就可以推断出其他线程的修改会被阻止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.