scala MutableList当foreach添加元素时为什么不抛出Exception

che*_*ohi 0 scala exception list

当我尝试scala列表时,我发现了一个问题.当我使用MutableList时,只想尝试在foreach中追加一个元素(我知道这是一个糟糕的操作):

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

控制台输出:

Hello World~
Hello World~
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么上面的代码没有抛出ConcurrentModificationException或输出正常?

axe*_*l22 7

ConcurrentModificationException在迭代期间抛出修改通常称为失败快速语义.Scala集合类通常不会抛出ConcurrentModificationExceptions,因为:

  • fail-fast使迭代器的实现变得复杂
  • fail-fast通常会降低迭代器实现的速度
  • 在所有情况下都很难保证快速失败(即使是Java类也不能保证并且尽力而为)
  • 在多线程代码中更难以确保失败快速

由于这个原因,Scala只是记录了不允许并发修改,而不是努力实现快速失败并最终导致漏洞抽象.