Parallel, Concurrent, and Distributed Programming in Java Specialization

Start Date: 05/31/2020

Course Type: Specialization Course

Course Link:

Explore 1600+ online courses from top universities. Join Coursera today to learn data science, programming, business strategy, and more.

About Course

Parallel, concurrent, and distributed programming underlies software in multiple domains, ranging from biomedical research to financial services. This specialization is intended for anyone with a basic knowledge of sequential programming in Java, who is motivated to learn how to write parallel, concurrent and distributed programs. Through a collection of three courses (which may be taken in any order or separately), you will learn foundational topics in Parallelism, Concurrency, and Distribution. These courses will prepare you for multithreaded and distributed programming for a wide range of computer platforms, from mobile devices to cloud computing servers. To see an overview video for this Specialization, click here! For an interview with two early-career software engineers on the relevance of parallel computing to their jobs, click here. Acknowledgments The instructor, Prof. Vivek Sarkar, would like to thank Dr. Max Grossman for his contributions to the mini-projects and other course material, Dr. Zoran Budimlic for his contributions to the quizzes, Dr. Max Grossman and Dr. Shams Imam for their contributions to the pedagogic PCDP library used in some of the mini-projects, and all members of the Rice Online team who contributed to the development of the course content (including Martin Calvi, Annette Howe, Seth Tyger, and Chong Zhou).

Course Syllabus

Parallel Programming in Java
Concurrent Programming in Java
Distributed Programming in Java

Deep Learning Specialization on Coursera

Course Introduction

Boost Your Programming Expertise with Parallelism. Learn the fundamentals of parallel, concurrent, and distributed programming. Parallel, Concurrent, and Distributed Programming in Java Specialization (Project-Centered Course) This 4-week long project course builds upon the topics in the previous Specialization. It is recommended that you take the courses in this order: Parallel Programming in Java: Part 1 ( Parallel Programming in Java: Part 2 ( Concurrent Programming in Java: Part 1 ( The course focuses on the design of a simple concurrency control system in Java. It focuses on the details of the synchronization model and the synchronization primitives that are implemented in a consistent and modular way. Learning Outcomes: After completing this course you will: * Design a simple concurrency control system in Java * Specify the core synchronization primitives that are implemented in a consistent and modular way * Specify the synchronization primitives that are implemented in a consistent and modular way under the hood * Use a consistent and modular abstraction for synchronization * Implement a consistent and modular abstraction for synchronization under the hood * Explain the difference between synchronization and concurrency Recommended background: You should be comfortable writing small concurrent

Course Tag

Distributed Computing Optimistic Concurrency Control Parallel Computing Java Concurrency

Related Wiki Topic

Article Example
MPD (programming language) Multithreaded, Parallel, and Distributed programming (MPD) is a concurrent programming language whose syntax is derived from the one used in the book "Foundations of Multithreaded, Parallel, and Distributed Programming" The name thus lists the distinguishing features of the language, namely that it supports all three of these concurrent programming techniques.
List of concurrent and parallel programming languages This article lists concurrent and parallel programming languages, categorizing them by a defining paradigm. A concurrent programming language is defined as one which uses the concept of simultaneously executing processes or threads of execution as a means of structuring a program. A parallel language is able to express programs that are executable on more than one processor. Both types are listed as concurrency is a useful tool in expressing parallelism, but it is not necessary. In both cases, the features must be part of the language syntax and not an extension such as a library.
Concurrent object-oriented programming Concurrent object-oriented programming is a programming paradigm which combines object-oriented programming (OOP) together with concurrency. While numerous programming languages, such as Java, combine OOP with concurrency mechanisms like threads, the phrase "concurrent object-oriented programming" primarily refers to systems where objects themselves are a concurrency primitive, such as when objects are combined with the actor model.
Distributed computing The terms "concurrent computing", "parallel computing", and "distributed computing" have a lot of overlap, and no clear distinction exists between them. The same system may be characterized both as "parallel" and "distributed"; the processors in a typical distributed system run concurrently in parallel. Parallel computing may be seen as a particular tightly coupled form of distributed computing, and distributed computing may be seen as a loosely coupled form of parallel computing. Nevertheless, it is possible to roughly classify concurrent systems as "parallel" or "distributed" using the following criteria:
List of important publications in concurrent, parallel, and distributed computing Dijkstra: “Solution of a problem in concurrent programming control”
Concurrent computing Concurrent computations "may" be executed in parallel, for example, by assigning each process to a separate processor or processor core, or distributing a computation across a network. In general, however, the languages, tools, and techniques for parallel programming might not be suitable for concurrent programming, and vice versa.
Concurrent logic programming The first concurrent logic programming language was the Relational Language of Clark and Gregory, which was an offshoot of IC-Prolog. Later versions of concurrent logic programming include Shapiro's Concurrent Prolog and Ueda's Guarded Horn Clause language .
List of important publications in concurrent, parallel, and distributed computing Synchronizing concurrent processes. Achieving consensus in a distributed system in the presence of faulty nodes, or in a wait-free manner. Mutual exclusion in concurrent systems.
Concurrent logic programming The development of concurrent logic programming was given an impetus when GHC was used to implement KL1, the systems programming language of the Japanese Fifth Generation Project (FGCS). The FGCS Project was a $400M initiative by Japan's Ministry of International Trade and Industry, begun in 1982, to use massively parallel computing/processing for artificial intelligence applications. The choice of concurrent logic programming as the “missing link” between the hardware and the applications was influenced by a visit to the FGCS Project in 1982 by Ehud Shapiro, who invented Concurrent Prolog.
Concurrent constraint logic programming Concurrent constraint logic programming is a version of constraint logic programming aimed primarily at programming concurrent processes rather than (or in addition to) solving constraint satisfaction problems. Goals in constraint logic programming are evaluated concurrently; a concurrent process is therefore programmed as the evaluation of a goal by the interpreter.
Concurrent Collections "Concurrent Collections for C++" is an open source C++ template library developed by Intel for implementing parallel CnC applications in C++ with shared and/or distributed memory.
E (programming language) E is an object-oriented programming language for secure distributed computing, created by Mark S. Miller, Dan Bornstein, and others at Electric Communities in 1997. E is mainly descended from the concurrent language Joule and from Original-E, a set of extensions to Java for secure distributed programming. E combines message-based computation with Java-like syntax. A concurrency model based on event loops and promises ensures that deadlock can never occur.
Concurrent constraint logic programming A second effect of the difference between the non-concurrent and the concurrent version is that concurrent constraint logic programming is specifically designed to allow processes to run without terminating. Non-terminating processes are common in general in concurrent processing; the concurrent version of constraint logic programming implements them by not using the condition of failure: if no clause is applicable for rewriting a goal, the process evaluating this goal stops instead of making the whole evaluation fail like in non-concurrent constraint logic programming. As a result, the process evaluating a goal may be stopped because no clause is available to proceed, but at the same time the other processes keep running.
Java concurrency Most implementations of the Java virtual machine run as a single process and in the Java programming language, concurrent programming is mostly concerned with threads (also called lightweight processes). Multiple processes can only be realized with multiple JVMs.
Concurrent constraint logic programming Constraint handling rules can be seen as a form of concurrent constraint logic programming, but are used for programming a constraint simplifier or solver rather than concurrent processes.
Janus (concurrent constraint programming language) Janus is a computer programming language partially described by K. Kahn and Vijay A. Saraswat in "Actors as a special case of concurrent constraint (logic) programming", in SIGPLAN "Notices", October 1990. Janus is a concurrent constraint language without backtracking.
Parallel language There are hundreds of different parallel programming languages. See also concurrent computing.
Distributed Concurrent Versions System The Distributed Concurrent Versions System (DCVS) is a distributed revision control system that enables software developers working on locally distributed sites to efficiently collaborate on a software project. DCVS is based on the well known version control system "Concurrent Versions System". The code is freely distributable under the GNU and BSD style licenses.
Concurrent constraint logic programming The study of concurrent constraint logic programming started at the end of the 1980s, when some of the principles of concurrent logic programming were integrated into constraint logic programming by Michael J. Maher. The theoretical properties of concurrent constraint logic programming were later studied by various authors, such as Vijay A. Saraswat.
Java Heterogeneous Distributed Computing Java Heterogeneous Distributed Computing refers to a programmable Java distributed system which was developed at the National University of Ireland in Maynooth. It allows researchers to access the spare clock cycles of a large number of semi-idle desktop PCs. It also allows for multiple problems to be processed in parallel with sophisticated scheduling mechanisms controlling the system. It has been successful when used for tackling problems in the areas of Bioinformatics, Biomedical engineering and cryptography.