2013-04-07 5 views
0

빠른 질문입니다. Java의 객체에서 notify를 호출하면 notify를 호출 한 후 (엄격히) 대기하는 스레드를 깨우지 않습니다. 즉, 이미 기다리고 있던 깨우기 스레드 만 알립니다. 아마도 notifyAll은 같은 방식으로 동작합니다. 보증이 유지되지 않을 경우대기 명령 및 통보

예를 들어, 다음이 위해 가능한 것 :

  1. 스레드 N 잠금, 통화 통지 해제 잠금을 가져옵니다.
  2. 스레드 W는 잠금을 가져오고 호출을 대기하고 잠금을 해제합니다. ... 당신의 도움을

감사를

  • 스레드 W 스레드에 의해 깨우지 N의는 통지하고 계속된다!

  • 답변

    0

    대기중인 스레드 중 하나가 알림을 호출하면 깨어납니다. 현재이 객체를 기다리지 않는 쓰레드는 깨어있을 수 없으며 아직 기다리지 않은 쓰레드 (나중에 기다릴 것이다)는 깨울 수 없다.

    notifyAll을 호출하면 현재 대기중인 모든 스레드를 깨울 수 있습니다. 당신이 읽을 것을 권장

    에 대한 here

    0

    음을 명중, notify() 방법의 javadoc는 명확하게하는 것이 주 :

    입니다이 객체의 모니터에 대기하는 단일 스레드를 깨 웁니다. notifyAll()에 대한

    같은 일이 :

    이 객체의 모니터에 대기을 모든 thread를 재개합니다. 위해

    가 대기하는 스레드의 큐에 배치하는 스레드가 먼저 객체에 대한 잠금을 받아야합니다, 다음을 해제하고 그런 다음에야 다른 스레드가 잠금을 확보하고 notify()를 호출 할 수 있습니다.

    그래서 나는 그것에 대해 걱정할 필요가 없다고 생각합니다.