2013-07-23 2 views

답변

3

논리는 모든 인터럽트 블로킹 방법과 동일합니다. 즉, 스레드가 다른 스레드에서 보낸 신호 interrupt에 즉시 대응할 수 있습니다.

이 특정 기능의 사용 방법은 응용 프로그램 설계에 달려 있습니다. 예를 들어, 풀에서 풀을 확보하기 위해 대기중인 스레드의 우발적 인 상황을 제거하는 데 사용할 수 있습니다.

+0

"다른 스레드에서 보낸 인터럽트 신호에 즉시 대응할 수 있습니다."스레드는 lockInterruptibly()를 호출하면 다른 스레드의 인터럽트 신호를 기다립니다. 그걸 붙잡아?. 인터럽트 신호를 보내는 스레드는 인터럽트 신호를 보낼 때까지 잠금을 유지합니까? – MKod

+0

모든 스레드가 스레드를 인터럽트 할 수 있지만 잠금을 보유하고있는 스레드 일 필요는 없습니다. –

+0

Java 스레드 인터럽트는 하드웨어 또는 운영 체제 인터럽트와 다릅니다. 인터럽트 전달은 비동기 및 선점보다는 동기식 및 비 선제식입니다. 즉, 임의의 지점에서 발생하지 않으며 실행중인 코드를 일시 중지하지 않고 나중에 다시 시작합니다. 프로그램은 명시 적으로 테스트해야합니다. 그래서, 당신은'lockInterruptibly'가 명시 적으로 그들을 지속적으로 테스트한다고 말하고 있습니까? – overexchange

7

lockInterruptibly() 잠금이 이미 다른 스레드에 의해 보유되어 있고 잠금이 획득 될 때까지 대기 할 수 있습니다. 이는 일반 lock()과 동일합니다. 그러나 다른 스레드가 대기 스레드를 인터럽트하면 lockInterruptibly()InterruptedException을 반환합니다.