2013-07-08 3 views
6

내가 사용하고있는 자바 문서는 알리거나 알려지지 않은 웨이크 업인지 여부에 상관없이 Object.wait() 메서드가 반환되기 전에 관련 모니터를 요구한다는 것을 분명히합니다. 모든 정상적인 메소드 리턴은 모니터 재 획득에 의해 선행됩니다.Object.wait() 메서드는 예외를 throw 할 때 모니터를 다시 가져 옵니까?

그러나 Object.wait()이 예외를 throw하는 경우 어떤 일이 발생하는지에 대해서는 분명하지 않습니다 (예 : Interrupted Exception). 나는 그것이 실제로 예외를 던지기 전에 자물쇠를 다시 획득한다고 추측한다. 그러나, 문서 그것에 대해 매우 명시 적없는, 그래서 여기

내가에서 documentaiton 찾고 있는지 100 % ... 아니에요 : 그래서 http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#wait%28%29

, 내 추론이 올바른지, 또는 내 호출 코드가 예외가 발생 된 후 모니터 상태를 처리해야합니다 (예 : 필요한 경우 다시 가져 오기)?

답변

5

JLSObject#wait의 Javadoc보다 훨씬 자세하게 지정합니다. 그 본문에 따르면, 자물쇠는 무조건적으로 다시 획득되어야합니다. 해당 비트를 인용 :

  1. 스레드하는 개체 미터의 대기 세트에 추가하고, n은 m에 대한 작업을 수행 해제된다. 이 S 세트 기다리는 m '로부터 제거 될 때까지

  2. 스레드 는 상기 명령을 실행하지 않는다. 쓰레드가 다음 작업 중 어느 하나의 대기 세트로부터 제거 될 수 있고, 언젠가 나중에 재개 :

    • [...] 인터럽트 액션 수행되는

    • .

  3. 스레드 t 수행 미터에 N 로크 액션.

+0

경험적으로,이 올바른 것으로 보인다. 그것은 또한 합리적입니다. 설명서 버그를 암시하는 설명서에서 추론 할 수 있는지 확신 할 수 없습니다. –

+0

@PatriciaShanahan 답변을 완전히 다시 작성했습니다. 사실 JLS는 잠금 장치가 무조건 다시 확보 될 것이라는 점을 분명히 명시하고 있습니다. –

+0

@ PatriciaShanahan 감사합니다. 매우 명확하게 설명되어 있습니다. JLS 링크도 가져 주셔서 감사합니다. 다음 번에 API 문서에서 언급하지 않은 비슷한 질문을 사용할 것입니다. :) –

관련 문제