界: Code Quality
コードの質が低いと、予測できない動作につながります。ユーザーの視点には、それがしばしば使い勝手の悪さとなって現れます。攻撃者にとっては、予期せぬ方法でシステムにストレスを与える機会となります。
Code Correctness: Call to notify()
Abstract
notify()
がコールされるときにどのスレッドが起動されるのかは、あいまいです。Explanation
notify()
のコールで、起動されるスレッドを指定する方法はありません。 例 1: 次のコードでは、
notifyJob()
が notify()
をコールします。
public synchronized notifyJob() {
flag = true;
notify();
}
...
public synchronized waitForSomething() {
while(!flag) {
try {
wait();
}
catch (InterruptedException e)
{
...
}
}
...
}
この場合、開発者は
wait()
をコールするスレッドを起動しようとしていますが、notify()
が意図しているスレッドとは別のスレッドを通知する可能性があります。References
desc.structural.java.code_correctness_call_to_notify