ましめも

技術系メモ

ThreadLocalのお勉強

ThreadLocalというものの存在を知ったので、Play Frameworkがマルチスレッドで動いており、スレッドが使い回されていることを実感できるテストをしてみた。

object Application extends Controller {

  val threadLocal = new ThreadLocal[Int] {
    override protected def initialValue(): Int = {
      0
    }
  }

  def index = Action {
    threadLocal.set(threadLocal.get() + 1)
    Ok(views.html.index("Number: "+threadLocal.get()))
  }
  
}

これでindexを叩くと 1→2→3...と順調に上がっていくけど、大量に叩く(同時にab実行したりとかする)と突然数値が減ったり、突然大きくあがったりする。
そういえばTomcatの場合、HttpRequestのインスタンス自体が使いまわされているんだっけ…(うろ覚え)すごくハマった覚えが…