내 응용 프로그램에는 각 요청마다 자체 스레드가 있습니다. JMX/JConsole을 사용하여 모니터하고 경과 시간을 측정합니다. 요청에 너무 많은 시간이 필요할 경우 기본 스레드를 중단하여 중단하고 싶습니다. JConsole에서 호출하는 메서드에서 스레드 목록을 반복하고 적절한 인스턴스에서 interrupt()를 호출합니다.
단순히 스레드 인스턴스에서 interrupt() 메서드를 호출하면 플래그 만 설정되므로 InterruptedException도 throw해야합니다. 그러나이 중단 된 예외는 실제로 중단하려는 스레드 대신 currentThread에 적용됩니다. 플래그가 지정된 스레드를 종료하는 방법에 대한 힌트가 있습니까?다른 스레드에서 스레드를 종료하는 방법은 무엇입니까?
while (iterator.hasNext()) {
RequestHolder rh = iterator.next();
if (rh.getThread().getId() == threadId) {
rh.getThread().interrupt();
if(rh.getThread().isInterrupted()){
throw new InterruptedException();
}
}
}
은 단지 참고 사항 - 일부 차단하는 제 3 자 기능 때문에 IOException이 나처럼, 다른에 InterputException을 포장 할 수 있습니다 (축 그렇게). 그래서 항상 interupted 경우 확인하십시오. – JIV