2016-07-10 3 views

답변

2

바이어스 된 잠금 해지 (바이어스 됨 -> 씬 상태 전송) 만 발생합니다. 핫스팟 소스 코드 (synchronizer.cpp) 참조

: 잠금 편향된다 (그리고 필요하다면 취소) 경우

void ObjectSynchronizer::notifyall(Handle obj, TRAPS) { 
    if (UseBiasedLocking) { 
     BiasedLocking::revoke_and_rebias(obj, false, THREAD); 
     assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now"); 
    } 

    markOop mark = obj->mark(); 
    if (mark->has_locker() && THREAD->is_lock_owned((address)mark->locker())) { 
     return; 
    } 
    ObjectSynchronizer::inflate(THREAD, 
          obj(), 
          inflate_cause_notify)->notifyAll(THREAD); 
} 

발신자 확인 후 mark->has_locker() (이것은 "박막 모니터이다"와 같은 'S) 검사한다. 그렇다면 대기 세트가 비어 있고 인플레이션이나 다른 효과없이 빠른 종료가 수행됩니다 (is_lock_owned_check은 불법 사용의 경우에만 IllegalMonitorStateException을 던집니다).

알림을위한 Java 9 진입 점에서는 quick_notifyJEP 143: Improve Contended Locking의 일부로 표시되지만 동일한 체크가 수행됩니다.