Java_다중 스레드interrupt()

1784 단어 Java 기반
큰 놈의https://www.cnblogs.com/skywang12345/p/3479949.html、
아주 좋아요.
또 다른 사나이의 블로그 발견https://www.cnblogs.com/death00/p/11585028.html
자신의 한 가지 이해:
최종 작용은 라인을 끊는 것이다.
  • Thread.interrupt(), 현재 중단 표시를true
  • 로 설정
  • Thread 객체.isInterrupted(), 현재 스레드 객체의 중단 표시
  • 감지
  • Thread.interrupted (), 현재 인터럽트 표시를 검출한 다음 인터럽트 표시를false로 리셋합니다. 따라서interrupt 인터럽트 메커니즘은 현재 라인을 인터럽트하는 것이 아니라 인터럽트 표시의 변화입니다.
  • 1. 우선 API:
    interrupt()         。
                ;          interrupt()   ,   checkAccess()    。      SecurityException  。
                :     wait(), wait(long) wait(long, int)       (  )  ,       join(), join(long), join(long, int), sleep(long), sleep(long, int)          。         ,     interrupt()  ,    “    ”           InterruptedException  。  ,    wait()      ,    interrupt()     ;  interrupt()             “true”,            ,   “    ”       “false”,  ,     InterruptedException   。
              Selector    ,    interrupt()    ;            true,              。
                ,    interrupt()     ,           “true”。
        “      ”        。

    interrupt () 는 중단 신호만 보내고, 라인을 즉시 끝낼 수 없습니다.
    따라서 한 라인이 막힌 상태에서interrupt () 를 통해 중단되면, 처음에는 중단 표시를'true '로 설정하지만, 이상을 던지면 중단 표시가'false' 로 설정됩니다.동시에 InterruptedException 예외가 발생합니다.이 이상을 포획하여 끝냅니다.
    그 다음에 실행 상태의 라인에 대해interrupt () 를 통해 라인을 중단할 때, 중단 표시는 "true"로 설정됩니다.그래서 Thread 대상에게 협조한다.isInterrupted()로 종료
    됐습니다.
    결론적으로 두 가지 시나리오를 결합하면 모든 스레드를 중단할 수 있습니다.
    @Override
    public void run() {
        try {
            // 1. isInterrupted()  ,       true     。
            while (!isInterrupted()) {
                //     ...
            }
        } catch (InterruptedException ie) {  
            // 2. InterruptedException    , InterruptedException     ,     。
        }
    }

    좋은 웹페이지 즐겨찾기