찾다

 >  Q&A  >  본문

java - 멀티스레드 알림에 대한 질문

으아악

논리적으로 말하면, t1.wait()는 메인 스레드를 차단해야 하며, 알릴 다른 곳이 없습니다
그리고 t1.start()를 제거한 후에는 차단됩니다

이게 무슨 뜻인가요? 컴파일러 최적화? 아니면 동기화된 코드 블록 내에서 모니터가 동작하지 않으면 활성 알림이 종료되나요? ?

给我你的怀抱给我你的怀抱2755일 전621

모든 응답(1)나는 대답할 것이다

  • 仅有的幸福

    仅有的幸福2017-05-17 10:03:54

    최적화는 아니고 스레드 실행과 관련이 있습니다. Java 문서에는 public final synchronized void join(long millis)이 메소드의 주석에 문장이 적혀 있습니다

    <p> 이 구현은 {@code this.isAlive}를 조건으로 하는 {@code this.wait} 호출의 루프를 사용합니다. 스레드가 종료되면 {@code this.notifyAll} 메서드가 호출됩니다. 애플리케이션은 {@code Thread} 인스턴스에서 {@code wait}, {@code inform} 또는 {@code informAll}을 사용하지 않는 것이 좋습니다.

    굵은 글씨를 보세요. 실제로 스레드가 끝난 후에 호출되는 informAll이 대기를 깨우게 만드는 것입니다. 이는 가상 머신 최적화로 인해 발생하지 않습니다. 이것이 여러분의 혼란에 답이 되기를 바랍니다

    회신하다
    0
  • 취소회신하다