Synchronization in Java Part 1: Race conditions, locks, and conditions Part 2: The synchronized keyword Part 3: Atomic operations and deadlocks