Meta Topics|Advanced Topics

Software Technology: Object Locks

Assumed Knowledge
Learning Outcomes
  • Understand the effect of the synchronized keyword.
  • Trace and predict the effects of object locks on a running program.
  • Explain the safety and liveness tradeoffs that occur using object locks.

Pages 83 - 91 of “The Well-Grounded Java Developer” by Evans and Verburg.

A class is provided to you that can get into an inconsistent state. The included main method demonstrates that the inconsistency can happen. Modify this class using only the syncronized keyword to ensure it can never become inconsistent. What is the fewest number of synchronized keywords required?

Solution

The solution is provided in this attached java file. The minimum number of synchronized keywords required is 2.

You have been provided with some Java code that demonstrates the different states a Thread might be in. Download this code and run it to see what it does.

You should see that it starts up 10 threads all trying to read the time from a webservice. The webservice doesn’t like DOS attacks, so it rejects requests if they come too fast. For that reason the method that tries to get the time will wait some (random) amount of time before asking. As the program runs, it will show you the state of each of the 10 threads. Inspect the source code to see what each code means.

You should experiment with the effect that the synchronized keyword will have. What happens if you synchronize the getTime method? Did the program output show you what you expected?

Solution

stay tuned…

The Official Java Tutorial has an example of how you can create a deadlock using object locks. Inspect this example, run it, and work out which thread has ownership of each lock at the point where the program locks up. Is there a way to unlock the program? Can you unlock it _without touching the synchronized keywords”

Solution

stay tuned…