java.util.Collections.synchronizedList的JavaDoc表示以下内容


  当用户遍历返回列表时,必须手动对其进行同步:

List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
  Iterator i = list.iterator(); // Must be in synchronized block
    while (i.hasNext())
      foo(i.next());
}

  
  不遵循该建议可能导致不确定的行为。


现在我想知道当我在其上使用.asScala中的scala.collection.JavaConverters函数并在其上使用.map时会发生什么。

转换器将在迭代过程中进行同步还是还是必须自己完成同步?

最佳答案

.asScala函数返回一个scala.collection.mutable.Buffer,它对同步没有任何作用。

scala> Collections.synchronizedList(new util.ArrayList[Int]())
res0: java.util.List[Int] = []

scala> res0.asScala
res1: scala.collection.mutable.Buffer[Int] = Buffer()


您问题的答案是,您必须注意同步。

09-25 20:17