이번엔 윤종현님이 놀라움을 표현해주신 '데드락 스레드를 찾을 수 있는 함수!'에 대해 자세히 살펴보겠습니다.
돌려보니 정말로 잘 찾아냅니다.
오해로 뒤엉켜 사랑에서 빠져나오지 못하는 가슴 아픈 두 스레드를 검출해줍니다.
메서드 이름이 충분히 직관적이라 별다른 설명은 필요없지만 예제코드 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
채널 기반 동영상 서비스 Concerto
지난 몇개월간 작업한 채널기반 동영상 서비스인 Concerto 를 소개합니다. Concerto 는 오픈마루에서 진행된 프로젝트인 만큼 당연히 OpenID 기반이구요. OpenID 지원 사이트가 거의 그렇듯이
이력서 갱신 프로젝트
이직을 고려중인 요즘, '아 이력서 갱신해야겠다' 라는 생각이 들었다. 오늘은 사이버강의 듣느라 바쁘고 내일은 Hollys 프로젝트 미팅으로 바쁘겠지만 일찍 일어난 기념으로 오늘 정오까지 이력서 갱신을
분열성 성격과 자기 객관화의 신비한 경험
분열성 성격이 올라오면 일시적으로 자기 객관화가 잘 되어, 팔이 안으로 굽지 않는 신비한 경험을 할 수 있다. 그래서 잠깐 객관화가 되고 보니 내가 정말 못된 사람이었다. 객관화하여 바라보는 자아는 실제 나에 비해