Distributed Programming in Java


Part of the Parallel, Concurrent, and Distributed Programming in Java Specialization.

This course teaches industry professionals and students the fundamental concepts of distributed programming in the context of Java 8, by building on the previous two courses on Parallelism and Concurrency. Distributed programming enables developers to use multiple nodes in a data center to increase throughput and/or reduce latency of selected applications. By the end of this course, you will learn how to use popular distributed programming frameworks from Java programs, including Spark Map-Reduce, Remote Method Invocation (RMI), Message Passing Interface (MPI), as well as interfaces for locality-aware scheduling in multicore processors, and for offloading computations on to GPUs via the Java Native Interface (JNI).

Why take this course?

  • All data center servers are organized as a collection of distributed servers. While the previous two courses taught you how to exploit multiple processor cores within a single server for improved performance, it is important for you to also learn how to use multiple servers for increased bandwidth and reduced latency.
  • In addition to learning specific frameworks for distributed programming, this course will teach you how to integrate multicore and distributed parallelism in a unified approach.
  • The course includes programming “mini-projects” that will provide you with the necessary hands-on experience to use the concepts learned in the course on your own, after the course ends.

The desired learning outcomes of this course are as follows:

  • Distributed map-reduce programming in Java using the Spark framework
  • Client-server programming using Java’s Remote Method Invocation (RMI) interface
  • Message-passing programming in Java using the Message Passing Interface (MPI) and actor interfaces
  • Java interfaces for locality-aware scheduling in multicore processors
  • Java interfaces for offloading computations on to GPUs via the Java Native Interface (JNI).

Mastery of these concepts will enable you to immediately apply them in the context of distributed Java programs, and will also help you master other distributed programming frameworks that you may encounter in the future (e.g., in Scala or C++).


Any questions? Please e-mail RiceOnline@rice.edu