界: 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
類型。若向兩個不同的執行緒提供同一實例,並重複執行 synchronizedMethod
,則行為將無法預測。References
desc.structural.java.code_correctness_non_synchronized_method_overrides