Thread safety Managing access to state, using threads to synchronize and handle async events, recognising where thread safety is broken and reference escaping. [Java]
Sharing objects Recognising the risks of stale data in insufficiently synchronised programs, the difference between visibility and atomicity and strategies for safe publishing. [Java]
Composing objects Composing thread-safe components into larger programs, patterns for designing thread-safe classes, and the importance of encapsulation in concurrency. [Java]
Concurrency tools Implementation and use of a Bounded Blocking Queue using producer/consumer pattern, synchronised collections and the use of different synchronisers (condition_variable, locks, mutex). [C++]
Liveness hazards Recognising and avoiding liveness hazards such as deadlocks, livelocks and starvation. [Java]
GUI & threads Thread confinement, deadlocks and implementation of responsive GUI applications. [Java]