미래를 중단하지 않고 중단 할 수있는 방법이 있습니까?동시성 - 미래를 중단하지 않고 중단하기
부울 이 작업의 실행을 취소 할 수 (부울 mayInterruptIfRunning)
시도를 취소 할 수 있습니다. 작업이 이미 완료되었거나 이미 취소되었거나 다른 이유로 인해 취소 될 수없는 경우이 시도는 실패합니다. 성공한 경우 취소 작업이 호출 될 때이 작업에 이 시작되지 않았 으면이 작업이 실행되지 않아야합니다. 작업이 이미 시작된 경우 mayInterruptIfRunning 매개 변수 은이 작업을 실행하는 스레드가 작업을 중지하기 위해 중단 된 이어야하는지 여부를 결정합니다.
인터럽트를 캡처하려면 인터럽트 된 예외를 제대로 catch하거나 Runnable/Callable 메서드 내에서 isInterrupted() 메서드를 확인해야합니다.
그러나 모든 스레드가 집행자 서비스 풀에 있기 때문에 미래 인터페이스
를 사용하여 실행중인 미래를 중단 할 수있는 방법이 없다가, 아무도 thread.interrupt을 할 수 없다(). 그런 이유로 Future가 취소되거나 Thread Pool이 종료 될 때만 인터럽트가 발생한다고 가정 되었습니까?
미래 인터페이스에 인터럽트 방법이없는 이유를 이해하려고합니다. 도움이 될 것입니다.
나는이 점이 무엇이 될지 궁금해. 흥미롭지 만 그리 이상하지 않은 질문이다. –
몇 가지 문제가 있습니다. 1.) 인터럽트는 위험이며, 작업이 언제 중단 될 수 있는지 언제 알지 못합니다. 2) 미래가 어떤 스레드에도 묶여 있지 않습니다. Interrupt Future의 스레드는 다른 Futures를 깨뜨릴 수 있습니다. 3) 취소 메커니즘을 사용하면 인종 및 교착 상태와 관련된 가장 일반적인 함정 중 하나를 피할 수 있습니다. 4.) 코드가 무작위로 중지되지 않을 것이라고 높은 확신을 얻습니다 상태. – Rekin
"Future는 비동기 계산의 결과를 나타냅니다."- 비동기 엔티티를 인터럽트하는 것은 위험합니다. 호출하는 스레드가 계속 작동 할 수 있고 비동기 엔티티에서 응답을 기다리고 있기 때문입니다. –