2.1 What's thread safety? (スレッドセーフとは何ぞや?)

  • 複数のスレッドからクラスが安全に使われていることをスレッドセーフと巷はでは言われている。
  • 分かりやすいスレッドセーフの定義に重要なことは「正当性」の概念があるが、その「正当性」に対する明確な定義がない。
  • あるクラスには明示に従う。明示とはオブジェクトの状態や操作の影響を記述する事後条件を強いる不変表明を定義する。
あるクラスがスレッドセーフであるとは実行環境によってスケジューリングや
スレッドの実行のためにインタリービング処理では不足なく、
複数スレッドからアクセスされるときに正しい振る舞いを行うことである。

スレッドセーフなクラスは呼び出し元自身が与える
必要のないように同期化を隠蔽している。

2.1.1 Exaple: a stateless servlet

  • statelesなクラス(フィールドを持たず、他のクラスを参照しない)は常にスレッドセーフ
  • ほとんどのサーブレットはスレッドセーフにするために状態を保持しないように実装される。
ステートレスなオブジェクトは常にスレッドセーフである。

※コードサンプルは省略