Programming Concurrency on the JVM (Mastering Synchronization, STM, and Actors)