이번엔 윤종현님이 놀라움을 표현해주신 '데드락 스레드를 찾을 수 있는 함수!'에 대해 자세히 살펴보겠습니다.
돌려보니 정말로 잘 찾아냅니다.
오해로 뒤엉켜 사랑에서 빠져나오지 못하는 가슴 아픈 두 스레드를 검출해줍니다.
메서드 이름이 충분히 직관적이라 별다른 설명은 필요없지만 예제코드 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
CE Agenda 1.0.6.5 릴리즈
WinCE HandheldPC 용 슈퍼막강 일정관리 프로그램인 CE Agenda가 2004년 11월 7일에 새 버젼이 나왔습니다. '약속입력 및 반복일정 버그 수정'이 고쳐졌다는데.. 사실 거의 1년만에
터키행진곡 - 양반다리로 불쌍하게
이승훈의 제안으로 불쌍하게 쪼그려서 쳐보려 했다. 쪼그려 앉기는 너무 부담을 많이 줘서 그냥 양반다리로 했는데 동영상을 보더니 이승훈 이녀석이 불쌍하지도 않고 자세도 별로고 임팩트 없댄다. 그래서 동영상은
5년뒤에 뭐 먹고 살까
한살 한살 나이를 먹어가도 지금보다 더 큰 의지없이도 현재 사고패턴으로 노쇠하지 않을 '자신'은 있지만 지금보다 더 큰 의지나 변화가 없이는 발전하지 못하고 결국 5년뒤에는 이상한 모습이 되어 있지