Concurrent and parallel programming, why, what is so hard. Threads and locks in Java, shared mutable memory, mutual exclusion, visibility, volatile fields, atomic operations, avoiding sharing (thread confinement, stack confinement), immutability, final, safe publication.
Materials: Goetz chapters 1, 2, 3; Sutter paper; McKenney chapter 2; Bloch item 66
Handin at LearnIT.