Parallel / concurrent / distributed systems
Non-determinism
Processes and threads
Scheduling
Threads as objects in Java
Thread class
Runnable interface
State and threads
Daemon threads
Thread safety
Atomicity and Java-specific atomic ops
Class specifications and correctness
Locks (intrinsic, reentrant)
Synchronized blocks
The Java memory model
Sequential consistency
Visibility
Volatility
Monitor pattern
Performance issues and locking
Deadlock (and avoiding it)
Dependency graphs
Event sequences (program order, possible orders)
"happens-before" and volatility-based data races
Publishing versus escaping (and safe publication issues)
Safe object construction, issues of "this", the use of factory pattern
Immutable objects and final fields versus effectively immutable objects
Confinement techniques (stack-based, using ThreadLocal, etc)
Initialization safety
Web Accessibility