Nauczyłem się, że wywołanie metody obiektu wait()
spowoduje zwolnienie monitora obiektu, jeśli jest obecny.java: wait(), notify() i zsynchronizowane bloki
Ale mam kilka pytań dotyczących nazywając notify()
na tym obiekcie przez inny wątek:
(kiedy) będzie obudzić wątek czeka, jeśli inny (3rd) gwint posiada monitor obiektu w międzyczasie ?
czy wątek oczekujący się obudzi, czy trzeci wątek o nazwie
wait()
na tym obiekcie?jest to możliwe do ustalenia, czy wątek czeka na powiadamianie konkretny obiekt (Java 1.4/java 5)
Co się dzieje, jeśli
wait()
zostanie wywołana w metodziefinalize()
?
1. "wait() musi być wywołany w zsynchronizowanym bloku" jest błędne. Ale powinno. 2. Tak, masz rację. 3. Myślę, że Chris Denett jest tutaj. Thread.holdsLock() brzmi dobrze. 4. To było bardziej teoretyczne pytanie, aby zrozumieć pojęcia. – MRalwasser
@MRalwasser: Nie zgadzam się, musi. Zajrzyj tutaj: http://stackoverflow.com/questions/2779484/why-must-wait-always-be-in-synchronized-block/ – Marcus