0

내 Java 프로그램은 외부 메서드를 사용하여 (나는 소스 코드가 없습니다) 완료되도록 잠시 시간을두고 스레드 메서드에서 해당 메서드를 호출했습니다). 이제 문제는 사용자가 프로그램을 종료하고 싶다면 스레드를 즉시 멈추는 방법입니다 (끝내기 위해 기다리지 말 것).Java에서 외부 메서드 호출을 인터럽트 스레드

스레드의 인터럽트 메서드를 호출해도 아무 것도 발생하지 않고 외부 메서드가 완료되기 전에 중단 된 예외가 발생하지 않습니다. 중단 된 예외가 발생할 수 있고 동시에 외부 메서드가 실행되고 있지만 어쩌면 잡힐 수 있다고 생각 했나요?

어떻게 스레드가 정확하게 작동하는지 잘 모르겠습니다. 어떻게 이것을 해결합니까?

+0

코드 스 니펫을 게시 할 수 있습니까? – Mik378

+1

이 좋지 않은 스레드를 사용하고 있습니다. 인터럽트는 아무 효과가 없습니다. System.exit를 호출하면 스레드가 중단됩니다. – BevynQ

답변

3

스레드의 인터럽트 비트를 검사하지 않거나 다른 취소 메커니즘을 제공하지 않으면 다른 방법의 진행을 중지하기 위해 할 수있는 일이 많지 않습니다. 기본적으로 스레드 (즉, 스레드에서 실행되는 메소드)는 인터럽트되어야하는 경우 다른 스레드와 협업해야합니다.

그러나 프로그램은 모든 비 데몬 스레드가 완료 되 자마자 종료됩니다. 따라서 다른 스레드가 진행중인 진행을 차단하지 못하도록하려면 스레드 전에 thread.setDaemon(true)으로 호출하면됩니다. 그런 다음 데몬 스레드 (main가 실행 된 스레드 포함)가 수행해야하는 정리 작업을 완료 할 수 있으며 해당 데몬 스레드가 끝날 때까지 기다리지 않고 프로그램이 종료됩니다.

편집 :이 답변은 원래 Future을 사용하는 것에 대해 이야기했는데, 이것은 OP의 요점을 빠뜨린 것입니다. 이것은 프로그램 종료의 특별한 경우입니다. 약 Future s에 대해 읽으려면이 답변의 기록을 참조하십시오.

+1

사용자가 'System.exit()'으로 할 수있는 프로그램을 끝내기를 원하는 특별한 경우에 대해 묻습니다. – JVMATL

+0

아, 감사합니다. 나는 갱신 할 것이다. – yshavit