Due to a formatting bug, the header for Question 2 (along with example
transactions) was omitted from the generated PDF.
This has now been corrected.

Additional material

Many of the ideas in concurrent systems can feel quite abstract in the absence
of real-world experience; more glibly put, you can't understand a race
condition without having debugged one!
An introduction to concurrency primitives in Java, as well as several
optional practical exercises, can be found here: