• 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