계: 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