2014-10-08 79 views
0

當我嘗試scala列表時,我發現一個問題。當我使用MutableList,只是想嘗試追加中的foreach一個元素(我知道這是一個不好操作):scala MutableList當foreach添加元素爲什麼不拋出異常

import scala.collection.mutable.MutableList 
val tts = MutableList("Hello World~") 
tts.foreach { t => 
    tts += "Hello World~" 
    println(t) 
} 

控制檯輸出:

Hello World~ 
Hello World~ 

我的問題是,爲什麼上面的代碼不拋出ConcurrentModificationException或正常輸出?

回答

7

在迭代期間對ConcurrentModificationException進行修改時,通常稱爲快速失效語義。 Scala的集合類一般不扔ConcurrentModificationException,是因爲:

  • 快速失敗的迭代器的實現複雜
  • 快速失敗通常會減慢迭代器實現
  • 快速失敗是很難在所有的保障例(甚至Java類不guarantee it and do it on a best-effort basis
  • 快速失敗的更難,是保證在多線程代碼

由於這個原因, Scala只是說明不允許併發修改,而不是爭取快速失敗並最終導致漏洞的抽象。

相關問題