이번엔 윤종현님이 놀라움을 표현해주신 '데드락 스레드를 찾을 수 있는 함수!'에 대해 자세히 살펴보겠습니다.
돌려보니 정말로 잘 찾아냅니다.
오해로 뒤엉켜 사랑에서 빠져나오지 못하는 가슴 아픈 두 스레드를 검출해줍니다.
메서드 이름이 충분히 직관적이라 별다른 설명은 필요없지만 예제코드 89라인에서
interrupt()로 데드락을 빠져나와보려는 무의미한 시도를 해본 것처럼
결과적으로 검출해서 뭐하지?
하는 생각이 들지 않을 수 없습니다.
이에 method-doc 에는 이렇게 써있습니다.
This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.
그렇습니다. 데드락을 찾아서 뭔가 해결을 해줄 수 있다면야, MXBean 계열에 이녀석이 포함되어있지도 않았을 것입니다.
아무튼 synchronized 키워드의 blocking을 강제로 피하게 할 수 없다는 것은 여전히 슬픈 일입니다.
ReetrantLock.tryLock은 timeout을 받을 수 있고 interruptable 이므로 데드락 검출시 이를 해결해줄 수
있겠다는 생각을 하여 ReetrantLock을 사용하여 Deadlock2 예제를 만들어보았습니다.
와와 데드락 검출 후 해당 thread.interrupt()로 데드락을 붕괘시키는데 성공했습니다! ㅎㅎ
한가지 아쉬운 것은, 스레드가 데드락인지 검출할 수 있다면 pair로 찾거나 서로 엉킨 녀석들을 세트로 묶어 리턴해준다면 더 좋았지 않았을까 하는 생각이 듭니다.
데드락 특성상 한 놈만 포기해주면 나머지가 행복해질 수 있는거니 말입니다.
생각해보니, 데드락된 스레드들의 stack을 덤프해다 담당 프로그래머에게 던져주며 "야
" 하면 되겠군요..![]()
Comments
5 thoughts shared
Continue Reading
Discover more thoughts and insights
네이트온 lib 개발 중 생각난 것
네이트온의 문자대화 기능과 싸이월드와 연동된 수많은 응용기술들을 생각하다보니 오픈소스로 하는 것은 예나 지금이나 SKT 무서워서 섣불리 못하겠고.. 오픈소스도 어렵고 그보다 리스키한 서비스도 어렵다면, 개인적으로
Jython auto completion 구현하다
Jython interpreter에 tab auto-completion 기능 구현! 및 gnu-readline 연동 \[서문] 20시간동안 쉬지않고 Telnet(RFC854, RFC855, RFC857,
기획자님들, 개발을 배우세요
소프트웨어 개발, 당신들이 생각하는 것만큼 어렵지 않아요. 소프트웨어 개발은 여전히 어려운 것으로 알려져있고 실제로도 그렇지만, 당신들이 공포감을 가지고 있는 부분은 완전히 다른 부분이에요. 소프트웨어 개발