まだ勉強中。
 http://d.hatena.ne.jp/j5ik2o/20110225/1298610671
 finalフィールドとfinalローカル変数は別物。
 volatileはローカル変数には適用不可。
 finalとvolatileは同時適用不可。
 どちらも別スレッドでの変更の反映を即座に保証するための機構。
 volatileフィールドは排他制御を行う(ロックとは違うらしい)。
 finalフィールドは排他制御しないので、多分volatileよりもパフォーマンスがいい。
 finalフィールドでの値がスレッド間で保証されるのはコンストラクタが終了してから。
 ゆえに、finalフィールド使用モデルでのfinalフィールドの初期化はコンストラクタ内で行う。
 用途の違いとしては、インスタンス生成時に値が確定するようなスレッド間共有データはfinalフィールド。
 インスタンス生成後も値を書き換える必要のあるスレッド間共有データはvolatileフィールドで扱う。
 
 
コメントを残す