lock을 점유한 현재 스레드에서 Thread.sleep(...)
이 호출될 경우, 성능 문제와 확장성 문제를 야기할 수 있습니다.
심지어 잠금을 유지하는 스레드가 멈춰있기 때문에 데드락 상황을 더욱 악화시킬 수도 있습니다.
일시적으로 잠금을 해제하고 다른 스레드가 실행되도록 하려면, monitor
객체에서 wait(...)
를 호출하는 것이 좋습니다.
규칙을 어긴 코드
public void doSomething(){
synchronized(monitor) {
while(notReady()){
Thread.sleep(200); // 규칙을 어긴 코드
}
process();
}
...
}
규칙을 준수한 해결책
public void doSomething(){
synchronized(monitor) {
while(notReady()){
monitor.wait(200); // 규칙을 준수한 해결책
}
process();
}
...
}
같이보면 좋은 자료
If you like SONARKUBE, don’t forget to give me a star.