메인 스레드를 멈추지 않고 안드로이드 응용 프로그램에서 실행중인 모든 작업자 스레드를 중지하는 방법은 무엇입니까?안드로이드 응용 프로그램에서 모든 작업자 스레드를 중지하는 방법
예를 들면?
메인 스레드를 멈추지 않고 안드로이드 응용 프로그램에서 실행중인 모든 작업자 스레드를 중지하는 방법은 무엇입니까?안드로이드 응용 프로그램에서 모든 작업자 스레드를 중지하는 방법
예를 들면?
이 게시물은 귀하의 질문 자바
에 응답하지 않는 경우 스레드를 막을 수있는 방법을 제공, 그나마 읽고 다시 게시하시기 바랍니다, 스레드에 대한 톤을 이야기한다.
할 수 있습니다 만 interrupt
스레드하지만 sleep
, wait
등과 같은 방해 할 수있는 상태에있는 스레드해야 ...
또는 스레드 던져 예외를 만들기 위해 몇 가지 트릭을 사용 할 수 예 :
이 그래서 스레드의 작업에 따라 데이터베이스를 닫을 수 있습니다.스레드가 네트워크에 연결되어 있으면 스레드를 중지하고 네트워크 연결을 닫고 ioexception을 throw합니다.
스레드가 파일을 읽으면 스트림을 닫아 ioexception을 throw 할 수 있습니다.
스레드가 데이터베이스를 쿼리입니다 3.If는
, 당신은
실제로 스레드의 메서드는 stop()
이므로 모든 작업자 스레드를 거쳐 각각에 대해이 메서드를 호출 할 수 있습니다.
질문은 "작업자 스레드 목록을 구할 수 있습니까?"입니다. 더 나은 솔루션은 응용 프로그램 수준의 어딘가에이 목록을 저장하는 것입니다. 즉, 작업자 스레드를 생성 할 때마다 특수 목록에 넣으십시오. 이것은 스레드가 "작업자"스레드라는 것을 알고 있기 때문에 더 나은 솔루션입니다.
하지만 이론적으로는 응용 프로그램을 동적으로 검색하고 스레드를 검색 할 수도 있습니다. 제공된 배열을 채우는 정적 메서드 Thread.enumerate(Thread[] threads)
이 있습니다. 그러나 얼마나 많은 스레드가 현재 실행되고 있는지를 아는 방법은 무엇입니까? Thread.activeCount()
을 사용하십시오.
Thread[] threads = new Thread[Thread.activeCount()];
Thread.enumerate(threads);
for (Thread t : threads) {
if (isWorkerThread(t)) {
t.stop();
}
}
작업자 스레드를 식별하는 것은 사용자의 책임입니다. 예를 들어 스레드의 이름이나 스레드의 스택 추적을 사용할 수 있습니다.
그러나 권장되지 않는 방법 stop()
을 호출하는 것은 범죄입니다. 이유에 대해서는이 메소드의 javadoc을 참조하십시오.
"올바른"방법은 응용 프로그램 계층에서 정상적인 종료 메커니즘을 구현하는 것입니다. 각 스레드는 스레드가 종료되어야하는지 여부와 플래그가 참인 경우에만 run()
메서드에서 반환하는 플래그를 확인해야합니다. 이 경우 작업 스레드를 닫는 것은 매우 간단합니다.이 플래그의 값을 true로 설정하면 스레드가 종료됩니다. 이것은 "올바른"해결책입니다.
메인 스레드를 중지하면 무엇을 의미합니까? 작업자 스레드로 무엇을 의미합니까? – Blackbelt
관련 항목을 검색하려고 시도 했습니까? StackOverflow에는 멋진 검색 도구가 있습니다.귀하의 질문은 이해하기 쉽지 않습니다. 설명해주십시오. –