COSC 6490A 3.0 Concurrent Object Oriented Languages

Fall 2005

Students and instructor

Manpreet, Sunbir, Babita, Steven, Franck, Darius, Haifeng, Dusty, Nelson, Yan, Sergey

Brief overview

In this course, we focus on concurrent programming in the object oriented language Java. The course consists of three parts. In the first part, we discuss concurrent programming in general. In the second part, we concentrate on writing concurrent programs in Java. In the third and final part, we look at techniques and tools to verify concurrent Java programs.

General information

Time: Wednesday, 19:00-22:00
Place: Calumet College, room 335
Instructor: Franck van Breugel
Office hours: Monday, Wednesday and Friday, 11:30-12:30 or by appointment
Office: CSE 3046

Reference material

Material will be provided to the students. Class notes will be crucial.

Evaluation (tentative)

The performance of the students will be evaluated as a combination of three assignments (60%), three presentations (15%) and a paper (25%). The conversion from percentages to letter grades is described here. Below we provide some details.


There will be three assignments.
  1. hand out September 7; due September 28; Assignment 1
  2. hand out September 28; due October 26; Assignment 2
  3. hand out October 26; due December 6; Assignment 3
The objective of the first assignment is to find a nontrivial concurrent algorithm in the literature. In the second assignment, the aim is the implementation of the concurrent algorithm presented in the first assignment in Java. The focus of the third assignment is to apply some techniques or tools to verify the concurrent Java program of the second assignment. The papers describing the algorithms can be found here.


There will be three presentations. The presentations will be scheduled around the due dates of the assignments. In 10 minutes, the student has to present his or her assignment.


The paper has to be based on the three assignments. The paper is due on December 23.


The suggested reading material and additional material can be found below.

Week 1 (September 7)

E.W. Dijkstra. Cooperating Sequential Processes. EWD 123. 1968.
Focus on pages 10, 11, 19, 26-39. The other pages are also of interest and you are encouraged to at least skim through them.

C.A.R. Hoare. Communicating Sequential Processes. Communications of the ACM, 21(8):666-677, August 1978.

Week 2 (September 14)

Leah Graham and Panagiotis Takis Metaxas. Of course it's true; I saw it on the Internet! Communications of the ACM, 46(5):70-75, May 2003.

Some information about literature search can be found here.

Week 3 (September 21)

Mary Campione, Kathy Walrath and Alison Huml. The Java Tutorial.
Lesson: Threads: Doing Two or More Tasks At Once.

Buffer, IntegerProducer, Consumer, BufferTest

Week 4 (September 28)

P. J. Courtois, F. Heymans and D. L. Parnas. Concurrent control with "readers" and "writers". Communications of the ACM, 14(10): 667-668, October 1971.

The sleeping barber problem can be found on page 38 of
E.W. Dijkstra. Cooperating Sequential Processes. EWD 123. 1968.

John A. Trono. A new exercise in concurrency. SIGCSE Bulletin, 26(3): 8-10, September 1994.

Mordechai Ben-Ari. How to solve the Santa Claus problem. Concurrency: Practice and Experience, 10(6): 485-496, May 1998.

An applet of the sleeping barber problem can be found here. Another applet can be found here.

Week 5 (October 5)

No lecture.

Week 6 (October 12)

No lecture.

Week 7 (October 19)

James Gosling, Bill Joy, Guy Steele and Gilad Bracha. The Java Language Specification.
Chapter 17: Threads and Locks.

Week 8 (October 26)

Peter H. Roosen-Runge. Software Verification Tools. 2000.
Chapter 0: Introduction.

Week 9 (November 2)

Jeff Magee and Jeff Kramer. Concurrency: State Models and Java Programs. Wiley. 1999.

Jeff Magee and Jeff Kramer. Supplement on Program Verification. 1999.

Week 10 (November 9)

Lilian Burdy, Yoonsik Cheon, David Cok, Michael Ernst, Joe Kiniry, Gary T. Leavens, K. Rustan M. Leino, and Erik Poll. An overview of JML tools and applications. International Journal on Software Tools for Technology Transfer, 7(3):212-232, June 2005.

Week 11 (November 16)

Cormac Flanagan, K. Rustan M. Leino, Mark Lillibridge, Greg Nelson, James B. Saxe and Raymie Stata. Extended Static Checking for Java. In Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language Design and Implementation, pages 234-245, Berlin, June 2002. ACM.

ESC/Java can be found at in /cs/fac/src/escjava/bin/

Rance Cleaveland, Tan Li and Steve Sims. The Concurrency Workbench of the New Century. User's manual. July 2000.

The Concurrency Workbench can be found at in /cs/fac/bin/cwb-nc.

More information about the Concurrency Workbench can be found here.

Week 12 (November 23)

Peter C. Mehlitz, Willem Visser and John Penix. The JPF Runtime Verification System.

Willem Visser, Klaus Havelund, Guillaume Brat, SeungJoon Park and Flavio Lerda. Model Checking Programs. Automated Software Engineering Journal, 10(2): April 2003.

More information about Java PathFinder can be found here.

Java PathFinder can be found at in /cs/fac/packages/jpf/bin/jpf.

Week 13 (November 30)