3

リリース ノートから、checkstyle は Double-Checked ロック チェックを削除しました。

なぜか理解に苦しむ。彼らは、リリース ノートだけでなく、イシュー トラッカーでも次のように回答しています。

Java 5 (およびそれ以降) と同様に DoubleCheckedLocking チェックを削除し、volatile キーワードを使用して問題に対処しました。

checkstyle がこの警告を削除している場合、それはもはや役に立たないためだと思います。つまり、エラーが発生しなくなるか、別の警告が機能します。しかし

なぜこのようなエラーが Java 5 で発生しなくなったのか、別の警告によってどのように補完されるのかわかりません。誰か説明してくれませんか?

編集: volatile キーワードを追加すると問題が解決することを理解しています。私の懸念は次のとおりです。この警告はまだ何らかの形で価値があるのではないですか? プログラマーが前述のロック パターンを使用しているが、変数 volatile を宣言するのを忘れている場合について考えています。checkstyle はまだそれについて警告すべきではありませんか?

4

1 に答える 1

8

説明は、決定をほとんど説明しています。Java 1.5 以降では、volatileインスタンス変数を使用できます。メモリの可視性の問題を正しく処理し、ダブル チェック ロックの使用はもはやバグではありません。

使用することが解決策であるという意味ではありませんvolatile。しかし、1.5 では Java メモリ モデルが再定義され、volatile十分なものになりました。

こちらもご覧ください

于 2012-11-20T17:50:23.400 に答える