2011-09-11 2 views
3

개체의 wait() 메서드는 동기화 된 컨텍스트에서만 호출 할 수 있습니다. 즉, 현재 스레드는 wait() 메서드를 호출하기 위해 개체에 대한 잠금을 가져야합니다. 이제 스레드 T1이 객체 (obj)에 대한 잠금을 가지고 wait 메소드 obj.wait()을 호출하는 경우 어떻게 다른 스레드가이 객체 (obj)를 잠궈 서 이미 T1을 소유하고있는 wait를 호출 할 수 있습니까?스레딩 - 대기()

답변

9

wait은 동기화 된 컨텍스트를 해제합니다. documentation :

현재 스레드는이 개체의 모니터를 소유해야합니다. 다른 스레드 때까지이 모니터과 대기의 스레드 출시 소유권에만 대기를 호출하는 기간 동안 동기화 할 필요가 일어나이 객체의 모니터 (...)

+0

예, 동기화 된 블록은 다른 스레드가 잠금을 획득 할 수있는 하프 록으로 들어갑니다. 동기화 된 블록은 두 명령문 둘 다에 있기 때문에 깨우는 스레드는 동기화 된 컨텍스트에 '조인'되며 컨텍스트 외부에서 '잠긴'리소스에 액세스 할 기회가 없습니다. –

+0

"하프 록"..?! –

0

기다리고 스레드를 통지() 메소드를 호출 할 수 있습니다.