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 "e;features"e; 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.