Concurrent Programming in Java
© 1996-1999 Doug Lea
1.2 Objects and Concurrency
Readings and Resources
Textbooks presenting details on additional concurrent algorithms,
programming strategies, and formal methods not covered in this book
- Andrews, Gregory. Foundations of Multithreaded, Parallel, and
Distributed Programming, Addison-Wesley, 1999. This is an expanded
update of Andrews's Concurrent Programming: Principles and
Practice, Benjamin Cummings, 1991. (see also Book
supplement web site.)
- Ben-Ari, M. Principles of Concurrent and Distributed
Programming, Prentice Hall, 1990.
- Bernstein, Arthur, and Philip Lewis. Concurrency in
Programming and Database Systems, Jones and Bartlett, 1993.
- Burns, Alan, and Geoff Davis. Concurrent Programming,
- Bustard, David, John Elder, and Jim Welsh. Concurrent
Program Structures, Prentice Hall, 1988.
- Schneider, Fred. On Concurrent Programming,
The concurrency constructs found in the Java programming language
have their roots in similar constructs first described by
C. A. R. Hoare and Per Brinch Hansen. See Hoare's original
paper , as well as papers by them and others in following
- Dahl, Ole-Johan, Edsger Dijkstra, and C. A. R. Hoare
(eds.). Structured Programming, Academic Press, 1972.
- Gehani, Narain, and Andrew McGettrick (eds.). Concurrent
Programming, Addison-Wesley, 1988.
A comparative survey of how some of these constructs are defined
and supported across different languages and systems may be found
Concurrent object-oriented, object-based or module-based languages
include Simula, Modula-3, Mesa, Ada, Orca, Sather, and Euclid. More
information on these languages can be found in their manuals, as
well as in:
- Birtwistle, Graham, Ole-Johan Dahl, Bjorn Myhrtag, and Kristen
Nygaard. Simula Begin, Auerbach Press, 1973.
- Burns, Alan, and Andrew Wellings. Concurrency in Ada, Cambridge
University Press, 1995.
- Holt, R. C. Concurrent Euclid, the Unix System, and Tunis,
- Nelson, Greg (ed.). Systems Programming with Modula-3, Prentice
- Stoutamire, David, and Stephen Omohundro. The Sather/pSather
1.1 Specification, Technical Report, University of California at
Books taking different approaches to concurrency in the Java
programming language include:
- Hartley, Stephen. Concurrent Programming using Java, Oxford
University Press, 1998. This takes an operating systems approach to
concurrency. (See also Stephen
Hartley's home page.)
- Holub, Allen. Taming Java Threads, Apress, 1999. This collects
the author's columns on threads in the JavaWorld online magazine.
(See also Allen Holub's web
- Lewis, Bil. Multithreaded Programming in Java, Prentice Hall,
1999. (See also Bil's web site.)
This presents a somewhat lighter treatment of several topics
discussed in this book, and provides closer tie-ins with POSIX
- Magee, Jeff, and Jeff Kramer. Concurrency: State Models and
Java Programs, Wiley, 1999. This provides a stronger emphasis on
modeling and analysis. (See also the book's
Most books, articles, and manuals on systems programming using
threads concentrate on the details of those on particular operating
systems or thread packages. See:
- Butenhof, David. Programming with POSIX Threads,
Addison-Wesley, 1997. This provides the most complete discussions
of the POSIX thread library and how to use it.
- Lewis, Bil, and Daniel Berg. Multithreaded Programming with
Pthreads, Prentice Hall, 1998.
- Norton, Scott, and Mark Dipasquale. Thread Time, Prentice Hall,
Most texts on operating systems and systems programming describe
the design and construction of underlying support mechanisms for
language-level thread and synchronization constructs. See, for
For a listing of different thread libraries available on unix
systems and a discussion of implementation options, see The GNU Portable
- Hanson, David. C Interfaces and Implementations,
- Silberschatz, Avi and Peter Galvin. Operating Systems Concepts,
- Tanenbaum, Andrew. Modern Operating Systems, Prentice Hall, 1992.
Given the diverse forms of concurrency seen in software, it's not
surprising that there have been a large number of approaches to the
basic theory of concurrency. Theoretical accounts of process
calculi, event structures, linear logic, Petri nets, and temporal
logic have potential relevance to the understanding of concurrent OO
systems. For overviews of most approaches to the theory of
- van Leeuwen, Jan (ed.). Handbook of Theoretical Computer
Science, Volume B, MIT Press, 1990.
An eclectic (and still fresh-sounding) presentation of models,
associated programming techniques, and design patterns, illustrated
using diverse languages and systems, is:
- Filman, Robert, and Daniel Friedman. Coordinated
Computing. McGraw-Hill, 1984. See also online
There are several experimental concurrent OO languages based on
active objects, most notably the family of Actor languages. See:
- Agha, Gul. ACTORS: A Model of Concurrent Computation in
Distributed Systems, MIT Press, 1986.
A more extensive survey of object-oriented approaches to
concurrency can be found in:
- Briot, Jean-Pierre, Rachid Guerraoui, and Klaus-Peter
Lohr. "Concurrency and Distribution in Object-Oriented
Programming", Computing Surveys, 1998.
Research papers on object-oriented models, systems and languages
can be found in proceedings of OO conferences including ECOOP,
OOPSLA, COOTS, TOOLS, and ISCOPE, as well as concurrency
conferences such as CONCUR and journals such as IEEE
Concurrency. Also, the following collections contain chapters
surveying many approaches and issues:
- Agha, Gul, Peter Wegner, and Aki Yonezawa (eds.). Research
Directions in Concurrent Object-Oriented Programming, MIT Press,
- Briot, Jean-Pierre, Jean-Marc Geib and Akinori Yonezawa
(eds.). Object Based Parallel and Distributed Computing, LNCS 1107,
Springer Verlag, 1996.
- Guerraoui, Rachid, Oscar Nierstrasz, and Michel Riveill
(eds.). Object-Based Distributed Processing, LNCS 791,
- Nierstrasz, Oscar, and Dennis Tsichritzis
(eds.). Object-Oriented Software Composition, Prentice Hall, 1995.
Texts on distributed algorithms, protocols, and system design
Related web sites that in turn contain links to others include:
- Barbosa, Valmir. An Introduction to Distributed
Algorithms. Morgan Kaufman, 1996.
- Birman, Kenneth and Robbert von Renesse. Reliable Distributed
Computing with the Isis Toolkit, IEEE Press, 1994.
- Coulouris, George, Jean Dollimore, and Tim
Kindberg. Distributed Systems: Concepts and Design, Addison-Wesley,
- Lynch, Nancy. Distributed Algorithms, Morgan Kaufman, 1996.
- Mullender, Sape (ed.), Distributed Systems, Addison-Wesley, 1993.
- Raynal, Michel. Distributed Algorithms and Protocols, Wiley, 1988.
For details about distributed programming using RMI, see:
- Arnold, Ken, Bryan O'Sullivan, Robert Scheifler, Jim Waldo, and
Ann Wollrath. The JiniTM Specification, Addison-Wesley, 1999.
Most texts on real-time programming focus on hard real-time systems
in which, for the sake of correctness, certain activities must be
performed within certain time constraints. The Java programming
language does not supply primitives that provide such guarantees, so
this book does not cover deadline scheduling, priority assignment
algorithms, and related concerns. Sources on real-time design
For information on real-time extensions to Java, see the Real-Time Java Extensions group page,
as well as the J Consortium
- Burns, Alan, and Andy Wellings. Real-Time Systems and
Programming Languages, Addison-Wesley, 1997. This book illustrates
real-time programming in Ada, occam, and C, and includes a
recommended account of priority inversion problems and solutions.
Gomaa, Hassan. Software Design Methods for Concurrent and
Real-Time Systems, Addison-Wesley, 1993.
- Levi, Shem-Tov and Ashok Agrawala. Real-Time System Design,
McGraw-Hill, 1990. Selic, Bran, Garth Gullekson, and Paul
Ward. Real-Time Object-Oriented Modeling, Wiley, 1995.
- Real-Time patterns page
Last modified: Wed Aug 30 19:29:37 EDT 2000