界: Code Quality
コードの質が低いと、予測できない動作につながります。ユーザーの視点には、それがしばしば使い勝手の悪さとなって現れます。攻撃者にとっては、予期せぬ方法でシステムにストレスを与える機会となります。
Code Correctness: Non-Synchronized Method Overrides Synchronized Method
Abstract
同期化されたメソッドを、同期化されていないメソッドで上書きするべきではありません。
Explanation
メソッド
例 1: 次のコードでは、クラス
この場合、
synchronized
を宣言した親クラスは、複数のスレッドが同じインスタンスにアクセスするときに、正しい動作を保証します。すべての上書きメソッドを、synchronized
として宣言する必要があります。そうしないと、予期せぬ動作が発生する可能性があります。例 1: 次のコードでは、クラス
Foo
がクラス Bar
を上書きしていますが、メソッド synchronizedMethod
を synchronized
に宣言していません。
public class Bar {
public synchronized void synchronizedMethod() {
for (int i=0; i<10; i++) System.out.print(i);
System.out.println();
}
}
public class Foo extends Bar {
public void synchronizedMethod() {
for (int i=0; i<10; i++) System.out.print(i);
System.out.println();
}
}
この場合、
Foo
のインスタンスが、タイプ Bar
にキャストされる可能性があります。同じインスタンスが 2 つのスレッドに指定されており、synchronizedMethod
が繰り返し実行される場合、動作が予期できなくなります。References
desc.structural.java.code_correctness_non_synchronized_method_overrides