2012-03-21 3 views
4

runnable을 포함하는 스레드가 있습니다. 사용자가 취소하지 않으면 무한 루프가 필요합니다. 나는 이것에 대해 어떻게 생각하는지 모른다. 모든 도움은 대단히 감사하겠습니다. 건배.어떻게 스레드를 반복합니까?

+0

루프를 실행하기 만하면됩니다. 하지만 아마도 스레드가 주 스레드의 명령/작업 항목을 처리하기를 원할 것입니다. 그리고 쉴 때 자지? 말하면 그만둬? –

답변

9

사용자가 취소하지 않으면 무한 루프가 필요합니다. 분명히

당신은 쉽게 내부 사용자의 run() 방법의 루프를 추가 할 수 있습니다

new Thread(new Runnable() { 
     public void run() { 
      // loop until the thread is interrupted 
      while (!Thread.currentThread().isInterrupted()) { 
      // do something in the loop 
      } 
     } 
    }).start(); 

당신이 방법에 대해 요구하는 경우

new Thread(new Runnable() { 
     public void run() { 
      while (true) { 
      // do something in the loop 
      } 
     } 
    }).start(); 

그것은 스레드 중단을 확인하는 것이 좋은 생각 다른 스레드 (예 : UI 스레드)에서 스레드 작업을 취소 할 수 있습니다. 다음과 같이 할 수 있습니다.

private final volatile running = true; 
... 
new Thread(new Runnable() { 
    public void run() { 
     while (running) { 
      // do something in the loop 
     } 
    } 
}).start(); 
... 

// later, in another thread, you can shut it down by setting running to false 
running = false; 

volatile boolean을 사용해야 하나의 스레드에서 필드 변경 내용이 다른 스레드에서 볼 수 있습니다.

+0

완벽한 응답. 그게 내가 필요한 모든 것입니다. 건배. –

+0

휘발성 부울 변수를 사용하는 것이 안전합니다. 모든 기본 유형 (및 참조) 유형에 대한 모든 읽기 및 쓰기는 항상 원자 적입니다 (때때로 long 및 double 제외). AtomicBoolean 변수는 과잉이다. – Vladimir

+0

블라디미르 본래 "잔인 함"인지는 모르겠지만 '휘발성'도 작동합니다. 그렇습니다. – Gray

관련 문제