JR is a language for concurrent programming. It is an imperative
language that provides explicit mechanisms for concurrency,
communication, and s- chronization. JR is an extension of the Java
programming language with - ditional concurrency mechanisms based on
those in the SR (Synchronizing Resources) programming language. It is
suitable for writing programs for both shared- and distributed-memory
applications and machines; it is, of course, also suitable for writing
sequential programs. JR can be used in applications such as parallel
computation, distributed systems, simulation, and many others. JR
supports many "features" useful for concurrent programming. However, our
goals have always been keeping the language simple and easy to learn and
use. We have achieved these goals by integrating common notions, both
sequ- tial and concurrent, into a few powerful mechanisms. We have
implemented these mechanisms as part of a complete language to determine
their feasibility and cost, to gain hands-on experience, and to provide
a tool that can be used for research and teaching. The introduction to
Chapter 1 expands on how JR has realized our design goals.