문제

교착 상태에 빠진 스레드를 종료하고 싶습니다.첫째, 우리는 할 수 있습니다 교착상태 상태의 스레드 ID 감지 사용하여 findDeadlockedThreads() 의 방법 ThreadMXBean 수업 java.lang.management.

그런 다음 스레드 ID로 스레드를 종료하고 싶습니다. 따라서 두 가지 관련 질문이 있습니다.
(1) 스레드 ID로 스레드 제어를 얻는 방법은 무엇입니까?
(2) 차단된 스레드를 죽이는 방법은 무엇입니까?Interrupt() 메서드를 호출하면 스레드에 예외가 발생하고 스레드가 종료될 것이라고 생각합니다.

도움이 되었습니까?

해결책

루트 스레드 그룹에서 Thread 클래스를 가질 수 있습니다. 실행 중인 모든 스레드를 열거합니다..그런 다음 귀하의 ID와 일치하는 Thread.stop을 호출할 수 있습니다.

그렇긴 하지만, 이는 개체를 일관성 없는 상태로 둘 가능성이 있기 때문에 매우 위험합니다.나는 인터럽트 방법이 동기화 잠금을 기다리는 동안 멈춰 있는 스레드를 해제할 것이라고 믿지 않습니다. 따라서 (사악한) 중지 방법은

또한보십시오:"Java 스레드 기본 지원 중단".

다른 팁

java.util.concurrent.Lock.lockInterruptible() 메소드는 인터럽트 가능하지만 훨씬 더 일반적인 동기화 잠금은 인터럽트 가능하지 않습니다.설명서에서 언급한 대로 교착 상태 스레드를 열거하는 기능은 디버깅을 돕기 위한 것이며 프로덕션 환경에서 복구하기 위한 수단은 아닙니다.

프로덕션에서는 전체 프로세스를 종료하고 다시 시작하는 것이 더 안전할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top