Android에서는 일반 Java 환경과 동일한 규칙이 적용됩니다. Java에서 스레드는 종료되지 않지만 스레드 중지는 협력적인 방식으로 수행됩니다 . 스레드는 종료하도록 요청되고 스레드는 정상적으로 종료 될 수 있습니다.
종종 volatile boolean
스레드가 해당 값으로 설정 될 때 주기적으로 확인하고 종료 하는 필드가 사용됩니다.
나는 스레드가 종료 되어야하는지 여부를 확인 하기 위해 사용 하지 않을 것 입니다. 필드 수정 자로 사용하면 안정적으로 작동하지만 코드가 더 복잡해지면 루프 내에서 다른 차단 방법을 대신 사용 하기 때문에 코드가 전혀 종료되지 않거나 최소한 시간이 더 오래 걸릴 수 있습니다. 아마도 원한다.boolean
volatile
while
특정 차단 라이브러리 방법은 중단을 지원합니다.
모든 스레드에는 이미 부울 플래그 인터럽트 상태 가 있으므로 이를 사용해야합니다. 다음과 같이 구현할 수 있습니다.
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
}
} catch (InterruptedException consumed)
}
}
public void cancel() { interrupt(); }
Java Concurrency in Practice 에서 가져온 소스 코드 입니다. cancel()
메서드가 공용 이므로 원하는대로 다른 스레드가이 메서드를 호출하도록 할 수 있습니다.
interrupted
현재 스레드의 중단 된 상태를 지우는 이름 이 잘못된 정적 메서드도 있습니다 .