Waiting and Notification
Methods wait, notify and notifyAll can be invoked only when the synchronization lock is held on their targets
wait - resulting actions
- suspend current thread
- place thread on the wait queue
- release lock for the target object (all other locks retained)