Concurrency: State Models and Design Patterns

This course provides an introduction to concurrent programming with Java. The course focuses on fundamental concepts important for developing correctly functioning concurrent programs, such as safety, liveness and fairness, and on standard programming patterns and techniques for dealing with these issues. The course will include two lab sessions (replacing the regular lecture hours) in which students will work in small groups to apply the techniques presented. Much of the practical material in this lecture will be based on: Doug Lea, Concurrent Programming in Java: Design Principles and Patterns, Addison-Wesley, 1999. The theoretical foundations will be based on: Jeff Magee and Jeffrey Kramer, Concurrency: State Models & Java Programs, John Wiley, 1999.


Code 21005
Type Course
Site Bern
Track(s) T2 – Advanced Software Engineering
Semester A2019


Learning Outcomes

On successful completion of this course, you will be able to:

  • Reason about safety, liveness and fairness in concurrent programs
  • Use model-checking tools to prove safety and liveness properties
  • Use synchronization mechanisms to guarantee thread safety in programs
  • Reason about communication mechanisms to manage threads
  • Use practical techniques to avoid deadlock and ensure liveness
  • Reason about architectural styles to avoid concurrency issues
Lecturer(s) Mohammad Ghafari
Oscar Nierstrasz
Language english
Course Page

The course page can be found at

Schedules and Rooms

Period Weekly
Schedule Wednesday, 10:15 - 13:00
Location UniBE, Engehaldenstrasse 8
Room 003


Evaluation type written exam

Additional information


First Lecture
The first lecture will take place on Wednesday, 18.09.2019 at 10:15 in UniBE, Engehaldenstrasse 8, room 003.