문제

java.uti.concurrent.locks.abtractqueuedsynchronizer의 소스 코드를보고 있었고 arceire () 메소드는 다음과 같습니다.

 public final void acquire(int arg) {
    if (!tryAcquire(arg) &&
        acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
        Thread.currentThread().interrupt();
}

acquire ()를 호출하는 스레드를 방해하는 이유는 무엇입니까? 스레드 런 () 메소드에 어딘가에 점검이 있으면 arce ()를 호출 한 후에는 바람직하지 않고 생각하지 않을 것입니다.

누구든지 위의 코드가 왜 이렇게하는지 밝히는 사람이 있습니까?

도움이 되었습니까?

해결책

Javadoc을 읽는 경우 acquiredQueued, 당신은 대기 중에 실이 중단되면 true가 반환된다는 것을 알게 될 것입니다. 따라서, 전화 selfInterrupt (OpenJDK 소스 코드에서 호출 된대로)는 통화 스레드로의 인터럽트를 전파하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top