2017-11-24 3 views
3

이 질문은 이론적으로 완전합니다. 죄송하지만이 시간을 피할 수는 없습니다. 나는 약 ReentrantLockread this을 배우고 :ReentrantLock 공정성 매개 변수

참고하지만, 잠금 장치의 공정성 스레드 스케줄링의 공정성을 보장하지 않습니다.

이것은 무엇을 의미합니까? 어떻게 상상할 수 있겠습니까?

  1. 스레드 스케줄러가 잠금
  2. 을 취득
  3. t1 시도 (가장 긴 대기중인 스레드되지 않습니다) t1 스레드를 깨어 :

    의 잠금이 지금 누군가에 의해지지되지 않는다는 것을 가정하자 t1은 최대 대기 스레드가 아니기 때문에 t1

  4. t1
  5. 스레드 스케줄러가 스레드를 깨우겠습니다

Java가 이런 식으로 작동합니까? 매우 불완전한 경우 이것은 많은 컨텍스트 스위칭 (즉, 처리량이 떨어지며 문서에 기록되어 있음)을 의미합니다.

+0

Doc는 공정성 잠금이 기아 부족을 보장하지만 다른 스레드가 진행되지 않는 동안 많은 스레드 중 하나가 연속적으로 잠금을 획득 할 수 있다고 말합니다. 동일한 잠금을 최근에 릴리스 한 스레드가 다시 잠금을 얻는 것을 피하지 않는 이유 –

답변

4

이것은 무엇을 의미합니까?

OS는 스레드가 언제든지 실행되도록 예약합니다.

어떻게 생각하나요?

OS에는 JVM이 다음에 실행하고자하는 것이 거의 없습니다.

Java가 이런 식으로 작동합니까?

예, Java는 OS 스케줄러를 제어하지 않습니다.

+0

선명하고 포인트 블랭크 –