나는 정상적으로 스레드를 닫는 데 알맞고 올바른 해결책을 알고 있습니다.안드로이드/자바에서 * 응답하지 않는 스레드를 죽이는 것
내 게임이 내결함성이 있다고 가정하고 새로운 게임 플레이가 시작되면 이전 게임 플레이의 (일시 중지 된) 스레드를 정상적으로 닫으려고합니다. 이전 스레드가 버그가있어 무한 루프에 있기 때문에 조인에 실패하거나 닫는 경우 새 스레드를 인스턴스화하고이를 시작합니다. 그러나 나는 오래된 실이 여전히 거기에있어 먹는 자원을 좋아하지 않습니다.
프로세스를 죽이지 않고 응답하지 않는 스레드를 죽일 수있는 방법이 있습니까? 나에게 스레드가 Thread.stop()에 반응하지 않을 수도있는 곳을 실제로 읽지는 못하는 것 같습니다.
그러므로 버그가있어 무한 루프의 스레드를 다루는 방법은 없습니까? 스레드가 Thread.stop()에 반응하더라도 Thread.stop()은 Dalvik VM을 일관성없는 상태로 남겨 둘 수 있습니다 ...
그러나 문제는 정확히 내결함성입니다.어떤 이유로 든 스레드가 무한 루프에 빠졌고 새로운 스레드가 필요합니다 (이전 스레드는 죽을 수 있음). 개발자는 버그를 디자인하지 않고 방금 버그가 생깁니다. 내 스레드는 우아한 메커니즘을 가지고 있지만 분명히 프로그래머 오류로 무한 루프가 발생하면 아무 것도 할 수 없습니다. 내 질문은 정상 종료에 관한 것이 아니라 안정적인 종료에 관한 것입니다. 그건 작동하고 VM이 일관성이없는 상태로 내버려 두지 않을 것입니다. 쓰레드가 그 시간까지 불필요한 내 자신의 변수는 그렇게 재사용되지 않지만 안드로이드 워드 프로세서는 VM을 언급합니다 ... –
"우리는 새 스레드 "라는 말은 새로운 게임 플레이가 시작되었으므로 오래된 스레드는 필요 없지만 리소스를 정리하기 위해 지워 져야한다는 것입니다 (프로그래밍 오류로 인해 무한 루프에 있기 때문에 정상적으로 완료 될 수 없습니다).). –
@ThomasCalc : "올바르게 처리 할 코드를 작성하지 않은 경우 어떻게 처리 할 수 있습니까?" 분명히, 당신은 할 수 없습니다. 스레드는 모든 프로세스 리소스에 액세스 할 수 있으므로 오염되지 않은 프로세스 리소스는 없다고 가정합니다. 스레드 사이에 벽이 없습니다 (우리가 사용하는 이유입니다). 그래서 스레드가 손상된 경우 프로세스의 모든 스레드가 손상됩니다. 새로운 프로세스가 필요합니다. –