Slides for the course are available in three parts in postscript and PDF formats.
slides-part-1.ps | slides-part-1.pdf |
slides-part-2.ps | slides-part-2.pdf |
slides-part-3.ps | slides-part-3.pdf |
Question sheets are available for the first and third sections of the course. In addition to these questions, and for the second section, you may want to look at the past tripos questions from the Concurrent Systems Course -- for example 2001 P3 Q1, 2000 P4 Q1, 1999 P4 Q2, 1998 P4 Q2, 1998 P3 Q2, 1996 P3 Q1.
The remaining schedule for these sections is:
6. Tuesday 16 October | Design patterns (62-74) |
7. Thursday 18 October | Reflection and serialization (75-90) |
8. Saturday 20 October | Thread creation and management (91-103) |
9. Tuesday 23 October | Thread scheduling (104-111) |
10. Thursday 25 October | Real-time & multi-processor scheduling (112-125) |
11. Saturday 27 October | Mutual exclusion locks (126-135) |
12. Tuesday 30 October | Deadlock, limitations of mutexes. Condition variables (136-150) |
13. Thursday 1 November | Implementing general shared data structures (151-163) |
14. Saturday 3 November | Primitives for concurrency (164-175) |
15. Tuesday 6 November | General problems, naming (1-7) |
16. Thursday 8 November | Names, protection (8-19) |
17. Saturday 10 November | Communication using UDP, TCP (20-28) |
18. Tuesday 13 November | Communication using RMI (29-38) |
19. Thursday 15 November | RMI implementation, alternative systems (39-47) |
20. Saturday 17 November | Transactions, persistent storage and recovery (48-59) |
21. Tuesday 20 November | Two-phase locking, time-stamp ordering (60-72) |
22. Thursday 22 November | Optimistic concurrency control, Java example (73-85) |
23. Saturday 24 November | Cancelled |
22. Tuesday 27 November | Further Java topics (1-12) |
A set of example programs is available to accompany the course. These include new ones prepared this year along with previous examples written by myself and Peter Robinson. They are available in /group/clteach/tlh20/csaa-examples and for download in tar.gz format.
The examples cover the following topics:
01.Classes | Basic definition of classes using methods, fields and constructors. Run ComplexExample |
02.AbstractClasses | Use of abstract classes. Run NumberExample |
03.Interfaces | Extension of the previous example to introduce a Sortable interface for comparing numbers. Run SortExample |
04.Exceptions | An example of exception handling. Run TableTest |
05.ConsoleInput | Input of words and numbers from a console-based application. Run IOExample |
06.AWT | A simple example of an AWT interface showing text fields and buttons. Run GUIExample |
07.Swing | A more complex example showing Swing, introducing a menu for changing the look and feel of the application and a sub-window showing the previous example. Run GUIExample |
08.Serialization | Another AWT example, including the use of serialization to load and save the program state. Run Drawing or view Drawing.html with the appletviewer |
09.Threads | An example that creates multiple threads and uses join to wait for them to exit. Run ThreadExample |
10.WaitNotify | Another multi-threaded example, using wait and notify to control access to shared data. Run BufferExample |
11.UDP | A simple UDP client-server application. See the README file |
12.TCP | A simple TCP client-server application. See the README file |
13.RMI | An example of communication using RMI. See the information in the course slides for how to build and run this example |
14.TimestampOrdering | A simple system using time-stamp ordering. See the README file |
15.Semaphores | An implementation of the CountingSemaphore class used in the Primitives for concurrency section of the course. See CountingSemaphoreTest for an example of it in use |
16.MutexCondvar | Implementations of Mutex and Condition Variable classes based on counting semaphores. These are more complete versions than those in the slides and show how the earlier example number 10 may be re-coded using the new definitions. See BufferExample and BufferExample2 |
Local archives of Java documentation are maintained by the Computer Laboratory and by the Computing Service.
The emacs support files for Java are in /opt/gnu/share/emacs/site-lisp on thor, or as a tar archive.