교착 상태란?
●교착 상태란?
●교착 상태가 발생하는 조건
●자바에서 교착 상태 해결하는법
// thread 1
synchronized (resource1) {
synchronized(resource2) { ... }
}
// thread 2
synchronized (resource2) {
synchronized(resource1) { ... }
}
자바의 syncronized 키워드로 인한 교착 상태가 발생했다고 가정해보면, 위와 같은 경우에는 외부 synchronized 블록 내부에 synchronized 블록을 포함하지 않도록 개선하여 점유 대기 조건을 제거하여 교착 상태를 해결할 수 있음
이외에도 ReentrantLock을 사용하는 경우에는 tryLock() 메서드를 사용하여 타임아웃을 설정하거나, lockInterruptibly() 메서드를 사용하여 데드락이 발생하는 경우, 인터럽트를 통해 스레드를 깨울 수 있음
정리하자면 교착 상태가 발생하는 4가지 조건 중 하나를 충족하지 못하게 하거나, 대기하는 경우 무한정 기다리지 않는 방식으로 교착 상태를 풀어볼 수 있음