2017-09-25 18 views
0

java.util.Collections.synchronizedList的JavaDoc的說以下使用java.util.Collections.synchronizedList與Scala的.asScala轉換器

當務之急是用戶迭代它時,返回的列表上手動同步:

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了它會發生什麼。

轉換器會在迭代過程中處理同步問題還是需要自己完成同步?

回答

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

你的問題的答案是,你必須照顧同步。