2014-10-08 76 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只是说明不允许并发修改,而不是争取快速失败并最终导致漏洞的抽象。

相关问题