이 방법으로 실제로 무엇을 사용합니까? lockInterruptibly
? 나는 API을 읽었지만 나에게는 그다지 명확하지 않다. 누구나 다른 말로 표현할 수 있습니까?ReentrantLock에 lockInterruptibly의 실제 사용
7
A
답변
3
논리는 모든 인터럽트 블로킹 방법과 동일합니다. 즉, 스레드가 다른 스레드에서 보낸 신호 interrupt
에 즉시 대응할 수 있습니다.
이 특정 기능의 사용 방법은 응용 프로그램 설계에 달려 있습니다. 예를 들어, 풀에서 풀을 확보하기 위해 대기중인 스레드의 우발적 인 상황을 제거하는 데 사용할 수 있습니다.
7
lockInterruptibly()
잠금이 이미 다른 스레드에 의해 보유되어 있고 잠금이 획득 될 때까지 대기 할 수 있습니다. 이는 일반 lock()
과 동일합니다. 그러나 다른 스레드가 대기 스레드를 인터럽트하면 lockInterruptibly()
은 InterruptedException
을 반환합니다.
"다른 스레드에서 보낸 인터럽트 신호에 즉시 대응할 수 있습니다."스레드는 lockInterruptibly()를 호출하면 다른 스레드의 인터럽트 신호를 기다립니다. 그걸 붙잡아?. 인터럽트 신호를 보내는 스레드는 인터럽트 신호를 보낼 때까지 잠금을 유지합니까? – MKod
모든 스레드가 스레드를 인터럽트 할 수 있지만 잠금을 보유하고있는 스레드 일 필요는 없습니다. –
Java 스레드 인터럽트는 하드웨어 또는 운영 체제 인터럽트와 다릅니다. 인터럽트 전달은 비동기 및 선점보다는 동기식 및 비 선제식입니다. 즉, 임의의 지점에서 발생하지 않으며 실행중인 코드를 일시 중지하지 않고 나중에 다시 시작합니다. 프로그램은 명시 적으로 테스트해야합니다. 그래서, 당신은'lockInterruptibly'가 명시 적으로 그들을 지속적으로 테스트한다고 말하고 있습니까? – overexchange