2012-03-28 14 views
3

als der Titel.nach Abfangen "InterruptedException", warum "Thread.currentThread(). IsInterrupted()" Wert ist falsch?

public static void main(String[] args) throws InterruptedException { 

    Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       TimeUnit.SECONDS.sleep(2); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
       System.out.println(Thread.currentThread().isInterrupted()); //print false, who reset the interrupt? 

      } 
     } 
    }); 

    thread.start(); 
    TimeUnit.SECONDS.sleep(1); 
    thread.interrupt(); 
} 

nach "InterruptedException", warum "Thread.currentThread(). Unterbrochen wird()" 's-Wert ist falsch zu kontrollieren?

+0

Dieser Artikel kann Ihnen helfen, diesen Mechanismus zu verstehen und eine Antwort auf die Frage finden: [Was tun Sie, mit InterruptedException?] (Http://www.yegor256.com/2015/10/20/interrupted-exception.html) – yegor256

Antwort

10

Von der Javadoc für Thread.sleep (genannt von TimeUnit.sleep):

InterruptedException - wenn ein Thread den aktuellen Thread unterbrochen hat. Der unterbrochene Status des aktuellen Threads wird gelöscht, wenn diese Ausnahme ausgelöst wird.

denke ich die Absicht isInterrupted() ist Ihnen zu erlauben, zu erkennen, ob ein Thread vor Aufruf etwas unterbrochen wurde, die InterruptedException werfen würde. Wenn Sie noch InterruptedException gefangen, es ist anzunehmen, dass der Faden hat unterbrochen worden ...

+0

Ich stimme dir zu! Vielen Dank. – jiafu

+0

+1: Wenn Ihr Thread erneut unterbrochen wird, wird nach dem Auslösen einer Ausnahme, aber bevor Sie es überprüfen, es "wahr" sein –