Invoking wait(), notify and notifyAll() methods without acquiring lock over an object will lead to:
IllegalMonitorStateException
IllegalThreadStateException
IllegalLockStateException
InvalidLockException