InterruptedException의 해석

최근에 Thread로 다중 루틴 프로그램을 썼어요.sleep()일 때 InterruptedException과 마주치는 경우가 있습니다.몇 가지 자료를 찾았는데, 다음은 나 자신의 이해이다.
차단 방법
몇몇 다중 스레드와 관련된 방법은 막는 방법이다. 예를 들어 Thread.sleep(), Thread.wait(), Thread.join().
이러한 방법의 집행은 일반적으로 비교적 긴 시간을 필요로 하며, 코드가 막힌 방법까지 집행될 때, 일반적으로 이 방법이 되돌아오기를 기다려야 한다
계속 실행할 수 있고 InterruptedException은 특수한 메커니즘을 제공하여 차단을 앞당겨 끝낼 수 있습니다.
인터럽트 변수
모든 루틴은 bool 변수를 유지합니다. 루틴이 중단 (true) 또는 비중단 상태 (false) 임을 나타냅니다.루틴의 초기 상황에서 중단 변수는false입니다.
이 변수의 bool 값은 Thread를 통과할 수 있습니다.isInterrupted() 메서드를 사용하여 Thread.인터럽트 () 방법으로 인터럽트를 제거합니다. (인터럽트 변수는false로 설정됩니다.)
스레드 인터럽트
하나의 스레드는 Thread를 호출할 수 있습니다.interrupt () 방법으로 다음 절차에 따라 다른 스레드를 중단합니다.
1. 중단 변수가true로 설정됩니다.
2. 라인이 차단 방법을 실행하면 이 방법은 차단을 취소하고 중단 변수를false로 다시 설정합니다.
(이런 메커니즘은 차단 방법 내부에서 끊긴 변수의 값을 끊임없이 조회하여 실현하는 것이다)
예:
class ThreadTest implements Runnable {
 
     @Override
     public void run() {
                 System.out.println("before sleep");
             try {
                 Thread.sleep(5000);
             } catch (InterruptedException e) {
                                 System.out.println(Thread.currentThread().getName());
                 Thread.currentThread().interrupt();
                 System.out.println("after interrupt");
             }        
         System.out.println("after sleep");    
         
         try {
             Thread.sleep(5000);
         } catch (InterruptedException e) {
             // TODO Auto-generated catch block
             //e.printStackTrace();
             System.out.println(Thread.currentThread().getName());
             Thread.currentThread().interrupt();
             System.out.println("after interrupt");
         }
         System.out.println("after sleep");    
     }
     
 }
 
 public class ThreadBasic {
     
     public static void main(String[] args) {
         
         Thread t = new Thread(new ThreadTest(), "thread-1");
         t.start();
         
         t.interrupt();
         System.out.println(t.isInterrupted());
     }
 }

좋은 웹페이지 즐겨찾기