To
awaken a thread, a different thread which has a lock on the same object must call
notify.
When
notify is called, the block that had the lock on the object continues to have its lock it
releases it.
Then a
thread is awakened from its wait() and can grab the lock and continue processing.