Myths & Facts
Analyzing performance
Defining performance via tests
Increasing throughput using threads
Threading basics
Java 5 Executor Framework
Futures
Deadlock, a first look
Review non-threaded example
Analyzing performance
Predicting performance increase after threading
A mental model for where objects live
How do multiple threads cause problems
How can we demonstrate this using unit tests
Relating Java Source Code to Java Byte-Code
Synchronized & guarding access
Atomic Primitives
Dependent State
Client-based locking
Server-based locking
Fixing producer-consumer
Analyzing contention
Removing contention and limiting the size of critical sections
Dining Philosophers
Deadlock
Conditions for deadlock
Making deadlock impossible
Evaluating efficiency
Evaluating response time