2011-08-30 4 views
1

도움을 파괴 그래서이 코드 :자바 스레드에게 나를 자바 스레드 을 죽일

new Thread(new Runnable() { 
    public void run() { 
    // process() method is time-consuming and has no while-loop in his body 
    // so I want to give user to stop it 
    new AnyObject().process(); 
    } 
}).start(); 

내 질문은 내가 같은 스레드를 죽일 수있는 방법인가?

+0

스레드를 죽이는 방법을 찾는 것이 좋은 방법인지 잘 모르겠습니다. 아마 AnyObject(). process()를 구현하는 것이 좋습니다. 그러면 항상 호출 스레드가 종료됩니다. –

답변

3

Thread.stop()을 호출 할 수 있지만 이유가 무엇인지 이해해야합니다 (시스템이 일관성없는 상태로 남을 수 있음). 수행중인 작업이 자체 포함되고 올바르게 동작하는 경우 , 그것은 문제가되지 않습니다. 그것이 아니라, 당신이이 방법을 중단 할 필요가 없습니다 것입니다, 따라서 캐치 (22)이 "솔루션"으로 행동했다 그러나 경우

, 스레드를 중지)

1

궁극적으로 유일한 안전한 방법은 그것을 가지고하는 것입니다 실행 루프를 종료하십시오. 이를 수행하는 두 가지 주요 방법이 있습니다. AnyObject.process 메소드가 주기적으로 점검하는 플래그를 설정하거나 AnyObject.process 메소드가 인터럽트에 올바르게 응답하고 종료하도록하는 플래그를 설정하십시오. 그러나 후자의 방법을 사용하려면 스레드에 대한 참조를 유지해야 인터럽트 방법을 실행할 수 있습니다.

나중에 참조 할 필요가 있기 때문에 AnyObject에 대한 참조를 유지해야합니다.

모두 실패하면 System.exit()가 일반적으로 트릭을 수행합니다.

0

thread에서 interrupt()를 호출하여 스레드를 중지 할 수 있습니다.

0

스레드를 중지하려면 thread.interrupt()를 사용할 수 있습니다!

0

run() 메소드가 종료되면 스레드가 종료됩니다.

예에서 new AnyObject().process();이 종료 될 것입니다.

그래서 process() 메소드를 종료하면 스레드가 종료됩니다.