finalフィールド参照の中にfinalじゃない要素がある場合

http://d.hatena.ne.jp/j5ik2o/20110225/1298610671

適切にコンストラクトされたオブジェクトのfinal field を通して到達できる変数(例えばfinal field が参照する、オブジェクトのフィールド)はどんな変数でも、やはり他のスレッドから見える事が保証されているのです。これはつまりfinal field が、(他のスレッドから見える、参照の正しい値に加えて)例えばLinkedListへの参照を含んでいる場合には、(コンストラクト時の)そのLinkedListの内容も、同期化無しで他のスレッドから見えることを意味します。その結果として、finalの意味が大幅に強化されたのです。つまり同期化無しでもfinal field には安全にアクセスする事ができ、コンパイラーはfinal field が変わらないものと想定する事ができ、従って繰り返しのフェッチを避けて最適化する事ができるのです。

よーするに、finalフィールド参照からなら、参照先のオブジェクトの中身にfinalじゃない要素があろうが同期を気にせずアクセス可能だぜーってことを言ってる。
すばらしい。これを活用すれば、同期する箇所を減らしてスレッドセーフが実現できる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です