So far what I did is:
Could someone please comment on my code?
I believe that will work.
First, it is not possible for two invocations of synchronized methods on the same object to interleave. When one thread is executing a synchronized method for an object, all other threads that invoke synchronized methods for the same object block (suspend execution) until the first thread is done with the object.
When subsequent threads attempt to call method() while method() is busy servicing another thread, the second thread will block until the first thread is finished with method().