Course week | ISO week | Date | Who | Subject | Materials | Exercises |
---|---|---|---|---|---|---|
1 | 35 | 29 Aug | PS | Concurrent and parallel programming, why, what is so hard. Threads and locks in Java, shared mutable memory, mutual exclusion, Java inner classes. | Goetz chapters 1, 2; Sutter paper; McKenney chapter 2; Bloch item 66; Slides week 1; Exercises week 1; Example code: pcpp-week01.zip | Exercises week 1 |
2 | 36 | 5 Sep | PS | Threads and Locks: Threads for performance, sharing objects, visibility, volatile fields, atomic operations, avoiding sharing (thread confinement, stack confinement), immutability, final, safe publication | Goetz chapters 2, 3; Bloch item 15; Slides week 2; Mandatory exercises week 2; Example code: pcpp-week02.zip | Mandatory handin 1 |
3 | 37 | 12 Sep | PS | Threads and Locks: Designing thread-safe classes. Monitor pattern. Concurrent collections. Documenting thread-safety. | Goetz chapters 4, 5; Slides week 3; Exercises week 3; Example code: pcpp-week03.zip | Exercises week 3 |
4 | 38 | 19 Sep | PS | Performance measurements. | Sestoft: Microbenchmarks; Slides week 4; Exercises week 4; Example code: pcpp-week04.zip; Optional: McKenney chapter 3 | Mandatory handin 2 |
5 | 39 | 26 Sep | PS | Threads and Locks: Tasks and the Java executor framework. Concurrent pipelines, wait() and notifyAll(). | Goetz chapters 6, 8; Bloch items 68, 69; Slides week 5; Exercises week 5; Example code: pcpp-week05.zip | Exercises week 5 |
6 | 40 | 3 Oct | PS | Threads and Locks: Safety and liveness, absence of deadlock and livelock. The ThreadSafe tool. | Goetz chapter 10, 13.1, appendix A; Bloch item 67; Slides week 6; Exercises week 6; Example code: pcpp-week06.zip | Mandatory handin 3 |
7 | 41 | 10 Oct | PS | Threads and Locks: Performance and scalability | Goetz chapter 11, 13.5; Slides week 7; Exercises week 7; Example code: pcpp-week07.zip | Exercises week 7 |
42 | 17 Oct | Fall break | ||||
8 | 43 | 24 Oct | PS | Threads and Locks: GUI applications | Goetz chapter 9; Slides week 8; Exercises week 8; Example code: pcpp-week08.zip | Mandatory handin 4 |
9 | 44 | 31 Oct | PS | Threads and Locks: Testing concurrent programs. | Goetz chapter 12; Herlihy and Shavit chapter 3; Slides week 9; Exercises week 9; Example code: pcpp-week09.zip | Exercises week 9 |
10 | 45 | 7 Nov | PS | Transactional memory, Multiverse library | Harris et al 2008 paper; Herlihy and Shavit sections 18.1-18.2; Cascaval et al 2008 paper; Slides week 10; Exercises week 10; Example code: pcpp-week10.zip | Mandatory handin 5 |
11 | 46 | 14 Nov | PS | Optimistic concurrency, lock-free data structures, Treiber stack, compare-and-swap | Herlihy and Shavit chapter 11; Goetz chapter 15; Slides week 11; Exercises week 11; Example code: pcpp-week11.zip | Exercises week 11 |
12 | 47 | 21 Nov | PS | The Michael and Scott queue, progress concepts, Java memory model | Goetz chapter 15 and 16; Michael and Scott paper; Optional: Java Language Specification section 17.4; Slides week 12; Exercises week 12; Example code: pcpp-week12.zip | Exercises week 12 |
13 | 48 | 28 Nov | CB | Introduction to message passing concurrency (no mutable shared memory), Introduction to Erlang, Introduction to Java+Akka. | Erlang chapter 1, 2, 5; Slides week 13; Exercises week 13; Example code: pcpp-week13.zip | Mandatory handin 6 |
14 | 49 | 5 Dec | CB | Message passing (no mutable shared memory), Erlang, Java+Akka. | Slides week 14; Example code: pcpp-week14.zip; or see materials at Claus's page | No new exercises |
~/lib/jsr305-3.0.0.jar
, add import
javax.annotation.concurrent.GuardedBy;
to your Java source
files, and mention the jar file on the classpath when compiling Java
files, as in javac -cp ~/lib/jsr305-3.0.0.jar *.java