1. 방해 지식 포인트
다음 요약은 JDK8을 기반으로합니다
이 기사는 인터럽트를 완전히 설명하지는 않지만 몇 가지 중요한 요점 만 나열합니다. thread.interrupt를 완전히 이해하려면 참조 자료를 볼 수 있습니다.
다음은 참고 문헌을 이해하는 데 도움이되는 몇 가지 새로운 기사입니다.
인터럽트 메소드가 호출되면 차단 된 상태의 스레드에 대해 인터럽트 플래그가 true로 설정됩니다. 인터럽트에 응답 할 것인지 (이 플래그 비트의 변경 사항을 인식) API의 설계에 따라 다릅니다. JDK의 차단 IO API, 동기화 된 동기화 블록 및 잠금 장치의 많은 방법 (잠금 제외)은 인터럽트에 응답하지 않습니다. 물론, 호출 스레드는 플래그 비트 판단을 사용하여 API 자체가 인터럽트에 응답하도록 할 수 있습니다.
인터럽트 메소드가 호출되면 대기/timed_waiting 상태의 스레드에 InterruptedException **가 던져지고 인터럽트 플래그 비트 false **가 설정됩니다. 예를 들어, 스레드가 thread.sleep, object.wait ()을 호출 한 후.
스레드가 시작되지 않았거나 (신규) 또는 종료 된 경우 (종료) 인터럽트 () 호출은 영향을 미치지 않으며 인터럽트 플래그가 설정되지 않습니다.
모범 사례 : 때로는 일부 방법이 디자인에서 중단되거나 취소 될 수 없지만 다른 스레드가 인터럽트 요청을 보낼 때 다른 발신자가 "상황을 이해하도록"마크를 유지해야합니다.
공개 작업 getNextTask (Blockingqueue <aveSt> 대기열) {boolean Interrupted = false; try {while (true) {try {return queue.take (); } catch (InterruptedException e) {// fianlly Interrupted = true의 종속성 상태 마크; // 가속화되고 재 시도}}} 마침내 {if (Interrupted) // FianLly에서 비고 누락 된 인터럽트 알림 스레드가 없는지 확인합니다. }}일부 취소 작업은 인터럽트를 사용하여 구현할 수 있습니다. 예를 들어:
패키지 동시에; import java.util.concurrent.blockingqueue; import java.util.concurrent.callable; import java.util.concurrent.executorservice; import java.util.concurrent.executors;/** * wanshao에 의해 생성 */** date : 2017/12/18 * time ::42 PM **/** aforpte */**/**/12/18 {public static void main (String [] args)은 InterruptedException {Interrupttask Interrupttask = new Interrupttask (); ExecutorService executorService = executors.newsingLethreadExecutor (); ExecutorService.Submit (인터럽트 스 태스); Thread.sleep (100); Interrupttask.cancel (); ExecutorService.shutdown (); }}}/*** 인터럽트에 응답하는 작업*/클래스 인터럽트 자리 구현 호출 가능 <integer> {private blockingqueue <asking> queue; // 스레드를 방해 할 스레드를 저장 스레드 t; @override public integer call ()는 interruptedException {System.out.println ( "차단 된 작업 시작"); try {t = thread.currentthread (); Thread.currentThread (). sleep (50000); } catch (InterruptedException e) {System.out.println ( "Interrupted"); e.printstacktrace (); } 반환 0; } public void cancel () {system.out.println ( "cacel a task ...."); // calling shread.currentThread ()는 여기에 스레드 풀의 스레드가 아닌 기본 스레드가 나타납니다. }}}요약
위는 편집자가 소개 한 JDK8 요약을 기반으로 Java의 업데이트입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!