最近、再び Java の勉強に時間を使い始めた。
ずいぶんと昔に書かれたものだが Brian Goetz 氏が書いてるシリーズが勉強になりそうなので、毎日 30 分くらいで読んでいる。
IBM developerWorks 日本語版 : Java Technology : 技術文書一覧
今のところ、concurrent 系の記事をメインに読んでいる。 せっかくなので読んだ内容を軽くまとめておこうと思う。
Effective Java とかぶるところもあるのと、30 分で軽くやりたいので、箇条書き形式のメモのレベルにおさえることを意識している。
安全な構築のテクニック
メモ:
- 「コンストラクト中に this 参照を漏らしてしまうことの問題(参照の漏洩問題)」について書かれている
- 簡単な原則を守ることで漏洩問題は回避できる
- 問題の1つはコンストラクト中の this 参照を別のスレッドに公開してしまうこと
- 明示的な場合:this 参照を静的なコレクションに格納するなど
- 暗黙的な場合:non static inner class からの参照など
- コンストラクタ内からスレッドをスタートしない
- スタートするスレッドは多くの場合 、明示的または暗黙的に this への参照をもつことが多い
- すなわちコンストラクタ内で this 参照することになる
- 原則的にはコンストラクタ内で this 参照を利用しない方がいいが、そうでない場合もでてくる
- この場合、外部に対して this 参照を「公開しない」という原則は必ず守る
- 仕様上はスレッド A がスレッド B を開始する時点で、スレッド A から見える変数はスレッド B からすべて見える
- コンストラクタでスレッド B を開始すると、中途半端な状態のオブジェクトが見える可能性がある
- JSR 133 は final 変数のセマンティクスを変更し、扱いやすいようになった
- ただし、this を漏洩しないことが前提条件である