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
上的"sudo -u hdfs hdfs fsck / -listcourruptblocks"
函数时会发生什么。
转换器会在迭代过程中处理同步还是我必须自己完成?
答案 0 :(得分:5)
.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()
您的问题的答案是,您必须注意同步。