スレッド毎に値を保持するThreadLocalってクラスを初めて認識した。
Threadクラスを使って自前でマルチスレッド化している場合は スレッド毎の値なんて簡単に用意できるから、気にしてなかった。
でもサーブレットの場合は サーブレットコンテナによって1つだけインスタンス化されてマルチスレッドで呼ばれるので、スレッド毎の値を(しかもスレッド毎に一度だけ初期化して)保持するにはThreadLocalはとても便利そうだ。
マルチスレッドセーフでないSimpleDateFormatは、インスタンスを使い回そうと思ったら同期化したり毎回インスタンス生成する必要があったわけだが、ウェブアプリではThreadLocalを使ってスレッド毎に一度だけインスタンス化する方法がとりやすくなるわけだ。
という訳で、ウェブアプリでSimpleDateFormatを使う方法は、高速な順に以下の通りという事のようだ。
- ThreadLocalを使用
- synchronizedで同期
- 毎回newでインスタンス生成