대기열에서 계속해서 읽는 스레드를 사용하고 있습니다.Java에서 루핑 스레드 중지 중
public void run() {
Object obj;
while(true) {
synchronized(objectsQueue) {
if(objectesQueue.isEmpty()) {
try {
objectesQueue.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
obj = objectesQueue.poll();
}
}
// Do something with the Object obj
}
}
이 스레드를 중지하는 가장 좋은 방법은 무엇입니까 : 같은
는뭔가? - Thread.stop()
는되지 않기 때문에, I는 N 원자 체크 조건 변수를 이용하는 stopThisThread()
방법을 구현할 수
1
I는 두 가지 옵션을 참조.
2 - Death Event 개체 또는 그와 비슷한 것을 큐에 보냅니다. 스레드가 종료 이벤트를 가져 오면 종료합니다.
나는 첫 번째 방법을 선호하지만 stopThisThread()
메서드를 호출해야 할 때를 알지 못합니다. 뭔가 큐에있을 수 있고 중지 신호가 먼저 도착할 수 있습니다 (바람직하지 않음).
제안 사항?
주, 당신의'wait'는 의사를 깨우는을 방지하기 위해,'while' 루프가 아닌'if'에 있어야합니다. –
인터럽트에 의존하는 모든 사람들에게 : 인생은 결코 단순하지 않으며 인터럽트가 아닌 "활동"에 인터럽트를 호출하고 그 활동이 인터럽트를 전혀 알지 못한다고 말하고 싶습니다. 이것은 경험에서 나온 것입니다. 그럼에도 불구하고, 나는 더 좋은 방법을 모른다 ... API를주의 깊게 보아라 : http://java.sun.com/javase/6/docs/api/index.html?java/lang/Thread .html 인터럽트() 메소드를 확인하십시오. – Yaneeve
@halfwarp : Stephen C의 대답에 +1과 +1. 당신의 * "죽음 사건"*은 실제로 "독약 (poison pill)"이라고 불린다. * 일단 당신이 그것을 dequeue하면 "쓰레드 멈추기"를 의미하는 특별한 물건 (poison pill)을 엔큐하기 만하면된다. 그렇게하면 * "대기열로가는 길에있을 수 있습니다"* [sic]는 여전히 독약보다 먼저 처리됩니다. – SyntaxT3rr0r