将java.util.Collections.synchronizedList与Scala的.asScala转换器一起使用

时间:2017-09-25 07:46:22

标签: java scala

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" 函数时会发生什么。

转换器会在迭代过程中处理同步还是我必须自己完成?

1 个答案:

答案 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()

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