Concurrency in Practice

Chapter2 Thread Safety

並列プログラミングとは
  • スレッドやロックの正しい使用方法を要求するが、それは単なるメカニズム。
  • スレッドセーフのコードを書くには、共有、上書き状態をきちんと管理すること。
スレッドセーフを実現するには
  • ちゃんと同期化機構を使用する。(syncheonizedキーワード、volatile変数、明示的なロック、アトミック変数)

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/concurrent/atomic/package-summary.html

  • 常に並列で動くかどうか意識すること

同期化を考慮していなかった場合の修正方法(重要)
  • 複数スレッドをとおして状態変数を共有しない
  • 状態変数を不変なものにする
  • 状態変数にアクセスする場合に同期化機構を使用する


後からスレッドセーフに直すより、最初からスレッドセーフな設計をするほうが当然楽。

スレッドセーフを実現するための指針

  • パフォーマンス測定結果がベストになるよう最適化を追求する
  • 実施した最適化が実際に成果をあげているか調べること。
スレッドセーフなクラスとスレッドセーフなプログラムについて
  • スレッドセーフなプログラムとはスレッドセーフなクラスの集まりになっているということが絶対ではない。
  • スレッドセーフなクラスにおいては、クラスが自分の変数をきちんとカプセル化しているかは重要