Concurrent Programming in Java
© 1996-1999 Doug Lea
1.2 Objects and Concurrency
Follow-ups
Readings and Resources
Concurrent programming
Textbooks presenting details on additional concurrent algorithms,
programming strategies, and formal methods not covered in this book
include:
- 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,
Addison-Wesley, 1993.
- Bustard, David, John Elder, and Jim Welsh. Concurrent
Program Structures, Prentice Hall, 1988.
- Schneider, Fred. On Concurrent Programming,
Springer-Verlag, 1997.
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
collections:
- 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
in:
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,
Addison-Wesley, 1983.
- Nelson, Greg (ed.). Systems Programming with Modula-3, Prentice
Hall, 1991.
- Stoutamire, David, and Stephen Omohundro. The Sather/pSather
1.1 Specification, Technical Report, University of California at
Berkeley, 1996.
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
site.)
- 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
threads.
- 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
web site.)
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,
1997.
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
example:
- Hanson, David. C Interfaces and Implementations,
Addison-Wesley, 1996.
- Silberschatz, Avi and Peter Galvin. Operating Systems Concepts,
Addison-Wesley, 1994.
- Tanenbaum, Andrew. Modern Operating Systems, Prentice Hall, 1992.
For a listing of different thread libraries available on unix
systems and a discussion of implementation options, see The GNU Portable
Threads Page.
Models
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
concurrency, see:
- 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
version.
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,
1993.
- 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,
Springer-Verlag, 1993.
- Nierstrasz, Oscar, and Dennis Tsichritzis
(eds.). Object-Oriented Software Composition, Prentice Hall, 1995.
Distributed systems
Texts on distributed algorithms, protocols, and system design
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,
1994.
- Lynch, Nancy. Distributed Algorithms, Morgan Kaufman, 1996.
- Mullender, Sape (ed.), Distributed Systems, Addison-Wesley, 1993.
- Raynal, Michel. Distributed Algorithms and Protocols, Wiley, 1988.
Related web sites that in turn contain links to others include:
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.
Real-time programming
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
include:
- 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
For information on real-time extensions to Java, see the Real-Time Java Extensions group page,
as well as the J Consortium
page.
Doug Lea
Last modified: Wed Aug 30 19:29:37 EDT 2000