In Chapter 20 of the Java Advanced Topics course (the video
on Synchronization and Thread Safety), at about 20 mins 15 seconds, I explain
that you tend to use the synchronized keyword with the smallest possible code
block. I demonstrate this with the following code:
Unfortunately, for the example we have been looking at, this
wouldn’t be thread safe! It would be possible, if a thread was interrupted
after the synchronized block, but before the return statement, for 2 threads to
be given the same number.
Thank you to one of our customers who pointed this out today
– the synchronized keyword needs to be around the minimum part of the code that
should not be interrupted. In this example it would need to be the entire
method.