Computer Laboratory Home Page Search A-Z Directory Help
University of Cambridge Home Computer Laboratory
Concurrent Systems and Applications
Computer Laboratory > Course material 2003-04 > Concurrent Systems and Applications

Concurrent Systems and Applications

Principal lecturer: Dr Timothy Harris
Taken by: Part IB

This course covers principles and techniques used in structuring and implementing multi-threaded and distributed software systems.

Lecture schedule

The course runs Monday, Wednesday, Friday throughout Michaelmas term at 12-1pm.

The first twelve slots, beginning Friday Oct 10, are in the Heycock room on the New Museums Site. The final twelve slots, beginning Friday Nov 7, are in Lecture Theatre 1 in the William Gates Building at West Cambridge.

Note that I will not be giving a lecture on Wednesday Oct 29 or on Friday Oct 31.

1. Fri Oct 10Introduction
2. Mon Oct 13Objects and classes
3. Wed Oct 15Packages, interfaces, nested classes
4. Fri Oct 17Design patterns
5. Mon Oct 20Reflection and serialization
6. Wed Oct 22Graphical interfaces
7. Fri Oct 24Memory management
8. Mon Oct 27Native methods, class loaders
9. Wed Oct 29No lecture
10. Fri Oct 31No lecture
11. Mon Nov 3Threads
12. Wed Nov 5Mutual exclusion
13. Fri Nov 7Deadlock
14. Mon Nov 10Condition synchronization
15. Wed Nov 12Worked examples
16. Fri Nov 14Low-level synchronization
17. Mon Nov 17Distributed systems
18. Wed Nov 19Network sockets (TCP and UDP)
19. Fri Nov 21RPC and RMI
20. Mon Nov 24Transactions, isolation, serializability
21. Wed Nov 26Enforcing isolation
22. Fri Nov 28Crash recovery and logging
23. Mon Dec 1Examples class 1
24. Wed Dec 3Examples class 2

Study materials

  • Syllabus

  • Slides [PDF format]
  • Past exam questions (CSAA, Concurrent Systems, Further Java) The slides identify which of the past exam questions remain relevant to this course and the point at which you should be able to complete each of the questions. The slides also contain additional questions pitched at a range of levels.

  • Example source code from the slides and as additional illustration. Also available as a tar.gz archive and under $CLTEACH/tlh20 on PWF Linux.


Can you write an additional Java class which creates an object that, when passed to the test method causes it to print Here!?? As I say in the code, editing the class A itself, or using library features like reflection, serialization or native methods are considered cheating! I'll give a copy of Operating Systems to the first person to get an answer. I'll provide some hints in lectures if nobody can spot it in a week or so -- none of the PhD students has got it yet.
  public class A 
    // Private constructor tries to prevent A
    // from being instantiated outside this 
    // class definition
    // Using reflection is cheating :-)

    private A() { }

    // 'test' method checks whether the caller has
    // been able to create an instance of the 'A'
    // class.  Can this be done even though the 
    // constructor is private?

    public static void test(Object o) {
      if (o instanceof A) {
        System.out.println ("Here!");

Additional resources