2009-09-02 4 views
5

다른 프로그래머가 개발 한 Runnable 클래스를 실행해야하므로 deprecated stop()을 사용해야하고 메서드 실행 중에 isRunning == true를 사용할 수 없습니다.정말 필요하다면 Java에서 thread.stop()을 사용할 수 있습니까?

질문 : 메소드 stop()을 사용하면 안전할까요? Theads는 파일, DB 또는 인터넷 연결과 같은 모든 리소스에서 작동하지 않습니다. 하지만 stop() 메소드로 수십 개의 스레드를 중지 한 후에 JVM이 손상되지 않도록하고 싶습니다.

P.S : 그래, 난 그것을 테스트하는 몇 가지 코드를 작성할 수 있습니다,하지만 난 누군가가 답을 알고 희망)의

답변

6

정렬. 본질적으로 Thread.stop()에 대해 "손상"되는 것은 없습니다. 문제는 객체가 손상된 상태에 놓일 수 있다는 것입니다. 객체가 갑자기 멈추는 경우입니다. 프로그램의 나머지 부분에서 해당 객체에 대한 가시성이 없다면 괜찮습니다. 다른 한편으로는, 만약 그 객체들 중 일부가 프로그램의 나머지 부분에서 볼 수 있다면, 진단하기 어려운 문제가 생길 수 있습니다.

+0

오브젝트가 '논리적으로'디멘션되지만 phisically 디멘드되지 않으면이 경우에는 상관하지 않습니다.)) – Roman

0

JVM이 손상되지는 않지만 "재해"조건을 충족하지 못하도록 javadocs를 자세히 읽으십시오.

스레드가 보유하고있는 모든 동기화 모니터를 자세히 살펴볼 필요가 있습니다. 파일과 소켓에 대한 자료가 끊어져 있다고 언급했지만 공유 데이터 구조도 고려해야합니다. 또한 예외 처리가 RuntimeException을 잡지 못하게하십시오 (stop() 참조).

4

Thread.stop을 사용하는 경우 사용자가 거의 없다고 가정하면 문제가 해결됩니다. 예외적으로 테스트하기가 어렵습니다. 실행중인 코드에서 예외가 발생할 수 있습니다. 가능한 모든 상황을 테스트 할 수는 없습니다. 설정 한 컴퓨터에서 문제를 발견하지 못할 수도 있습니다. 다음 JRE 업데이트를 통해 프로그램이 시작될 수 있습니다.

예를 들어 스레드가 클래스를로드하고있는 경우입니다. 클래스가로드되지 않고 다시 시도되지 않습니다. 너 프로그램이 고장 났어.

1

이 질문에 대한 답변은 "Are thread stop and friends ever safe?"이며 답변 중 하나는 stop()을 안전하게 사용하기위한 전제 조건을 파악하려고했습니다. 그러나 이것은 여전히 ​​"진행중인 작업"입니다.

동의어 : 테스트 코드 작성이 반드시 도움이되지는 않습니다. (테스트는 버그가없는 것이 아니라 버그가 있음을 증명합니다.) 문제에 대해 추론하는 것이 좋습니다. IMO. 그러나 쉽지는 않습니다 :-).

관련 문제