Synchronized only means that one
thread can have the intrinsic lock of an object at one time. Wait and notify simple suspend a synchronized method and release the intrinsic lock and then notify tells wait to wake up but only releases the lock when it has finished.
Synchronized when accessing a single variable and wait and notify when many threads as there is also notify all.