繁体   English   中英

同步块是否阻止其他线程插入同步列表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM