2010-12-25 3 views
2

어쨌든 스레드를 죽이거나 즉시 중단됩니다.
내 스레드 중 하나처럼, 나는 (2-4 초) 실행하는 데 시간이 걸리는 메서드를 호출합니다. 이 메서드는 while (boolean flag) 블록에 있으므로 주 스레드에서 인터럽트 할 수 있습니다.자바의 다른 스레드에서 즉시 스레드를 죽이는 방법은 무엇입니까?

하지만 문제는 내가 중단하면 문제입니다. 실행중인 루프가 끝날 때까지 대기하고 다음 조건부 검사에서 실행을 중지합니다.

바로 그만두 길 원합니다. 이 작업을 수행 할 여지가 있습니까?

답변

4

이전 당신은 당신의 스레드에서 더 많은 브레이크 포인트를 넣어해야합니다.

stop()을 사용하여 즉시 중지 할 수 있지만 비용이 많이 들고 바람직하지 않은 여러 가지 부작용이있을 수 있습니다. stop()은 매우 조심스럽게 안전하게 사용할 수 있지만 실제로는 더 많은 중단 점을 넣는 것이 더 간단하고 쉽고 안전합니다 (스레드가 멈춰야하는지 확인하는 지점)

BTW, 원하는 경우 스레드를 자동 종료 할 수 있으므로 인쇄되지 않는 오류가 발생하면 ThreadDeath를 사용할 수 있습니다.

+0

은 클래스간에 변수를 공유 할 수 있습니다. 또는 스레드에서 내 while 루프에 대한 조건부 검사로 사용되는 부울 반환 유형 메서드를 만드는 경우이 아이디어는 괜찮습니까? 그리고 다른 클래스에서 중단 할 수 있습니까? 이것은 현명한 생각입니까? –

+0

스레드를 인터럽트하는 가장 확실한 방법은 Thread.interrupt() 메소드를 사용하는 것입니다. 많은 차단 작업이 이미이를 지원합니다. while 루프에서 Thread.interrupted()를 사용하고 있는지 테스트 할 수 있습니다. 필드를 추가하지 않아도됩니다. –

+0

http://download.oracle.com/javase/tutorial/essential/concurrency/interrupt.html –

1

아니요, 저는 방법이 없다고 생각합니다. 네가 원하지 않는 이유가있어. 당신이 스레드 정지가 필요한 경우

Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?

+1

더 이상 사용되지 않는 메소드를 사용해도 되나요? Thread.stop(); 메신저를 정확히 서버 목적. 내 질문에, 응용 프로그램이 내 마지막에 잘 작동한다면, 다른 곳에서도 잘 작동할까요? –

+2

@Sara, 아니요, 절대 안됩니다. 지원 중단은 삭제 대상으로 표시되었음을 의미합니다. 그들은 차후 버전 (또는 단지 죽은 코드)에서 완전히 제거 할 수도 있으며 다음 버전 일 수도 있습니다. 너는 결코 알지 못한다. 새로운 메소드를 사용하는 것이 가장 좋습니다. 왜냐하면 앞으로는 코드를 유지하는 것이 어려울 것이기 때문입니다. – st0le

관련 문제