Yes, wait() causes the thread that calls it to give up its lock.
Otherwise a notify() could never be called, as notify can only be called in a synchronized block or method. And the thread that calls notify() must have the lock on that object. If it were the case, that wait() kept its lock, no other thread could ever get it.
all events occur in real time
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com