2013-02-21 2 views
2

는 스레드가디자인보다 Runnable

스레드가 자신의 중단을 지원하지 않습니다 어떻게
public void run() { 
    while (!Thread.interrupted()) { 
    do something. 
    }  
} 
+0

주 사용이라고

if(!(Thread.interrupted())){//do something} 

를 들어 . –

답변

2

interruptable 어떤 스레드를 만들기위한 중단 된 경우 확인하는 동안 루프 내에서 실행 방법의 내용을 포장하기에 충분인가? 이것은 현재 에 따라 다릅니다. 스레드가 InterruptedException을 throw하는 메서드를 자주 호출하는 경우 해당 예외를 catch 한 후 실행 메서드 에서 반환합니다. 스레드가이 InterruptedException을 잡을 더 나은 다음 수면 bettween 작업을 위해가는 경우 예를 들어

Reference documentation

.

public void run(){ 
while(true) 
    try { 
     Thread.sleep(4000); 
    } catch (InterruptedException e) { 
     // We've been interrupted: no more messages. 
     return; 
    } 
} 

스레드는 인터럽트가 수신 된 경우 true를 반환 Thread.interrupted를 호출 주기적으로 확인할 수 있습니다 오랜 시간 동안 실행합니다.

+0

Quoi, 마스터 클래스에서 Exectuors를 종료 한 경우 InterruptException이 실행중인 스레드로 전송됩니다. 스레드가 해당 예외에 대한 작업을 중단해야합니다. – fortm

+0

run()에서 INterruptedException이 발견되면 반환 할 수 있습니다. BUt catch (Exception e) 블록이있는 곳에서도 run 메소드를 호출하면, THread 내부에서 그런 메소드로부터 e를 던지고 마지막으로 run catch 블록에서 리턴하면 여전히 동작 할 것인가? – fortm

+0

스레드에 따라 달라집니다. 쓰레드가 잠자기 상태가되어 확실히'Exectuors'가 종료되면 쓰레드가 '인터럽트 된 예외'를 발생시키는 이상한 조건이 있습니다 –

0

interrupt()는 현재 스레드가 중단되었는지 확인하는 정적 메서드입니다. isInterrupted()는 호출 된 Thread 객체를 검사하는 인스턴스입니다. 현재 스레드를 사용 Thread 객체의 모든 코드가 중단 될 수 있습니다하지 않는 것이 if(myThread.isInterrupted()){//do something }