読者です 読者をやめる 読者になる 読者になる

『Javaの理論と実践: 安全な構築のテクニック』のメモ

最近、再び Java の勉強に時間を使い始めた。

ずいぶんと昔に書かれたものだが Brian Goetz 氏が書いてるシリーズが勉強になりそうなので、毎日 30 分くらいで読んでいる。

IBM developerWorks 日本語版 : Java Technology : 技術文書一覧

今のところ、concurrent 系の記事をメインに読んでいる。 せっかくなので読んだ内容を軽くまとめておこうと思う。

Effective Java とかぶるところもあるのと、30 分で軽くやりたいので、箇条書き形式のメモのレベルにおさえることを意識している。

安全な構築のテクニック

記事:Javaの理論と実践: 安全な構築のテクニック

メモ:

  • 「コンストラクト中に this 参照を漏らしてしまうことの問題(参照の漏洩問題)」について書かれている
  • 簡単な原則を守ることで漏洩問題は回避できる
  • 問題の1つはコンストラクト中の this 参照を別のスレッドに公開してしまうこと
    • 明示的な場合:this 参照を静的なコレクションに格納するなど
    • 暗黙的な場合:non static inner class からの参照など
  • コンストラクタ内からスレッドをスタートしない
    • スタートするスレッドは多くの場合 、明示的または暗黙的に this への参照をもつことが多い
    • すなわちコンストラクタ内で this 参照することになる
  • 原則的にはコンストラクタ内で this 参照を利用しない方がいいが、そうでない場合もでてくる
    • この場合、外部に対して this 参照を「公開しない」という原則は必ず守る
  • 仕様上はスレッド A がスレッド B を開始する時点で、スレッド A から見える変数はスレッド B からすべて見える
    • コンストラクタでスレッド B を開始すると、中途半端な状態のオブジェクトが見える可能性がある
  • JSR 133 は final 変数のセマンティクスを変更し、扱いやすいようになった
    • ただし、this を漏洩しないことが前提条件である