Skip to content

Instantly share code, notes, and snippets.

@xuwei-k xuwei-k/Hoge.scala
Created Apr 20, 2015

What would you like to do?
case class Hoge(x: Int) {
lazy val i = x + 1
lazy val foo = (1 to 10)*i)
  • 現状(少なくとも2.11まで)のlazy valはthisでsynchronizedするという実装
  • fooを評価しようとする
  • fooを評価しようとしたスレッドが、synchronizedして、Hogeのインスタンスのロック取得
  • 並列コレクションでなければ、fooとiを評価しようとするスレッドは同じなので問題ない
  • 並列コレクションは、内部で別スレッド作るので、fooを評価しようとするスレッドと、iを評価しようとするスレッドは別物の可能性がある
  • fooを評価しようとしてHogeのインスタンスのロックを保持したままなので、iを評価しようとするスレッドは、ロックがずっと取得できなくてデッドロック
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.