Handling concurrent access to shared resources in Java - by Sebastian Konieczek