2012-09-05 3 views
0

질문에서 How to timeout a thread 제안 된 솔루션은 Runnable 개체를 제출할 수있는 ExecutorService 클래스와 함께 작동합니다.Java로 태스크를 어떻게 종료합니까?

ExecutorService 클래스는 모든 작업의 ​​실행을 중지하기 위해 shutdownshutdownNow의 두 가지 방법을 제공합니다.

는 "실행 중의 액티브 한 태스크 모든 정지를 시도해 작업을 기다리고의 처리를 정지 해, 실행을 대기하고 있던 태스크의리스트를 돌려줍니다 보장이 최선의 노력을 시도 이상 없습니다 :하지만 자바 API는 약 shutdownNow 말한다. 예를 들어, 일반적인 구현은 Thread.interrupt()를 통해 취소되므로 인터럽트에 응답하지 않는 작업은 절대로 종료되지 않을 수 있습니다. "

보증이있는 작업의 종료를 수행 할 방법이 없다면 궁금합니다.

답변

0

유일한 방법은 더 이상 사용되지 않는 Thread.stop()을 사용하는 것이지만 좋은 이유 때문에 사용하지 말아야합니다.

따라서 대답은 아니오입니다.이 작업 공동 작업없이 작업을 중지 할 방법이 없습니다. 그 일이 멈추라 고 요구되었다고해도 그 일이 멈추지 않는다면 아무 것도 할 수 없습니다.

1

작업의 구현이 사용자의 통제를 벗어났다면 대답은 아니오입니다.

작업의 구현자는 책임을지지 않으며 종료 방법을 제공 할 수 있습니다. 작업이 가능

0

데몬 스레드를 ... 열 경우 그게 없으면, 심지어 System.exit(-1) 그러나 당신이 많은 것들을 존중해야한다, 효과가 없을 수 있습니다 : 당신이 있는지 확인해야

1) 예외 : InterruptedException 당신이 t 컨설팅 고려)) 예를 들어 Thread.interrupted

(3)을 호출 스레드 상태를 확인 테스트

사 후 스레드의 중단 상태를 복원해야합니다) 예 :

2

을 sinked하지, 제대로 처리 그의 모든 커스텀 I/O 메소드 나 루프에서 (적절한 경우)

"Java Concurrency in Practical"을 읽으라고 권하고 싶습니다.이 훌륭한 책에는 스레드의 올바른 인터럽트를 보장하는 것이 포함되어 있습니다. 예상대로 작동합니다.

관련 문제