add synchronization between consumer/producer by leveraging monitor lock (calling wait(), notify() within a synchronized method)