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
- 常に並列で動くかどうか意識すること
同期化を考慮していなかった場合の修正方法(重要)
- 複数スレッドをとおして状態変数を共有しない
- 状態変数を不変なものにする
- 状態変数にアクセスする場合に同期化機構を使用する
後からスレッドセーフに直すより、最初からスレッドセーフな設計をするほうが当然楽。
スレッドセーフを実現するための指針
- パフォーマンス測定結果がベストになるよう最適化を追求する
- 実施した最適化が実際に成果をあげているか調べること。
スレッドセーフなクラスとスレッドセーフなプログラムについて
- スレッドセーフなプログラムとはスレッドセーフなクラスの集まりになっているということが絶対ではない。
- スレッドセーフなクラスにおいては、クラスが自分の変数をきちんとカプセル化しているかは重要