Assignment 3

Verify your Java implementation. Use tools like, for example, to verify your implementation. Try to address both safety and liveness properties. You may also want to consider minor variations on your implementation (showing, for example, that a particular lock is essential to guarantee deadlock freedom).