When you enroll in this course, you'll also be enrolled in this Specialization.
Learn new concepts from industry experts
Gain a foundational understanding of a subject or tool
Develop job-relevant skills with hands-on projects
Earn a shareable career certificate
There are 7 modules in this course
This course teaches learners (industry professionals and students) the fundamental concepts of parallel programming in the context of Java 8. Parallel programming enables developers to use multicore computers to make their applications run faster by using multiple processors at the same time. By the end of this course, you will learn how to use popular parallel Java frameworks (such as ForkJoin, Stream, and Phaser) to write parallel programs for a wide range of multicore platforms including servers, desktops, or mobile devices, while also learning about their theoretical foundations including computation graphs, ideal parallelism, parallel speedup, Amdahl's Law, data races, and determinism.
Why take this course?
• All computers are multicore computers, so it is important for you to learn how to extend your knowledge of sequential Java programming to multicore parallelism.
• Java 7 and Java 8 have introduced new frameworks for parallelism (ForkJoin, Stream) that have significantly changed the paradigms for parallel programming since the early days of Java.
• Each of the four modules in the course includes an assigned mini-project 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.
• During the course, you will have online access to the instructor and the mentors to get individualized answers to your questions posted on forums.
The desired learning outcomes of this course are as follows:
• Theory of parallelism: computation graphs, work, span, ideal parallelism, parallel speedup, Amdahl's Law, data races, and determinism
• Task parallelism using Java’s ForkJoin framework
• Functional parallelism using Java’s Future and Stream frameworks
• Loop-level parallelism with extensions for barriers and iteration grouping (chunking)
• Dataflow parallelism using the Phaser framework and data-driven tasks
Mastery of these concepts will enable you to immediately apply them in the context of multicore Java programs, and will also provide the foundation for mastering other parallel programming systems that you may encounter in the future (e.g., C++11, OpenMP, .Net Task Parallel Library).
Welcome to Parallel Programming in Java! This course is designed as a three-part series and covers a theme or body of knowledge through various video lectures, demonstrations, and coding projects.
In this module, we will learn the fundamentals of task parallelism. Tasks are the most basic unit of parallel programming. An increasing number of programming languages (including Java and C++) are moving from older thread-based approaches to more modern task-based approaches for parallel programming. We will learn about task creation, task termination, and the “computation graph” theoretical model for understanding various properties of task-parallel programs. These properties include work, span, ideal parallelism, parallel speedup, and Amdahl’s Law. We will also learn popular Java APIs for task parallelism, most notably the Fork/Join framework.
ReciprocalArraySum using Async-Finish (Demo)•5 minutes
ReciprocalArraySum using RecursiveAction's in Java's Fork/Join Framework (Demo)•6 minutes
6 readings•Total 35 minutes
1.1 Lecture Summary•5 minutes
1.2 Lecture Summary•5 minutes
1.3 Lecture Summary•5 minutes
1.4 Lecture Summary•5 minutes
1.5 Lecture Summary•5 minutes
Mini Project 1: Reciprocal-Array-Sum using the Java Fork/Join Framework•10 minutes
1 assignment•Total 30 minutes
Module 1 Quiz•30 minutes
1 programming assignment•Total 120 minutes
Mini Project 1 Submission•120 minutes
Functional Parallelism
Module 3•4 hours to complete
Module details
Welcome to Module 2! In this module, we will learn about approaches to parallelism that have been inspired by functional programming. Advocates of parallel functional programming have argued for decades that functional parallelism can eliminate many hard-to-detect bugs that can occur with imperative parallelism. We will learn about futures, memoization, and streams, as well as data races, a notorious class of bugs that can be avoided with functional parallelism. We will also learn Java APIs for functional parallelism, including the Fork/Join framework and the Stream API’s.
2.2 Futures in Java's Fork/Join Framework•5 minutes
2.3 Memoization•6 minutes
2.4 Java Streams•5 minutes
2.5 Data Races and Determinism•10 minutes
ReciprocalArraySum using RecursiveTask's in Java's Fork/Join Framework (Demo)•4 minutes
Parallel List Processing Using Java Streams (Demo)•4 minutes
6 readings•Total 60 minutes
2.1 Lecture Summary•10 minutes
2.2 Lecture Summary•10 minutes
2.3 Lecture Summary•10 minutes
2.4 Lecture Summary•10 minutes
2.5 Lecture Summary•10 minutes
Mini Project 2: Analyzing Student Statistics Using Java Parallel Streams•10 minutes
1 assignment•Total 30 minutes
Module 2 Quiz•30 minutes
1 programming assignment•Total 120 minutes
Mini Project 2 Submission•120 minutes
Talking to Two Sigma: Using it in the Field
Module 4•23 minutes to complete
Module details
Join Professor Vivek Sarkar as he talks with Two Sigma Managing Director, Jim Ward, and Software Engineers, Margaret Kelley and Jake Kornblau, at their downtown Houston, Texas office about the importance of parallel programming.
What's included
2 videos1 reading
Show info about module content
2 videos•Total 13 minutes
Industry Professional on Parallel, Concurrent, and Distributed Programming in Java - Jim Ward, Managing Director•7 minutes
Industry Professionals on Parallelism - Jake Kornblau and Margaret Kelley, Software Engineers•7 minutes
1 reading•Total 10 minutes
About these Talks•10 minutes
Loop Parallelism
Module 5•4 hours to complete
Module details
Welcome to Module 3, and congratulations on reaching the midpoint of this course! It is well known that many applications spend a majority of their execution time in loops, so there is a strong motivation to learn how loops can be sped up through the use of parallelism, which is the focus of this module. We will start by learning how parallel counted-for loops can be conveniently expressed using forall and stream APIs in Java, and how these APIs can be used to parallelize a simple matrix multiplication program. We will also learn about the barrier construct for parallel loops, and illustrate its use with a simple iterative averaging program example. Finally, we will learn the importance of grouping/chunking parallel iterations to reduce overhead.
Mini Project 3: Parallelizing Matrix-Matrix Multiply Using Loop Parallelism•10 minutes
1 assignment•Total 30 minutes
Module 3 Quiz•30 minutes
1 programming assignment•Total 120 minutes
Mini Project 3 Submission•120 minutes
Data flow Synchronization and Pipelining
Module 6•5 hours to complete
Module details
Welcome to the last module of the course! In this module, we will wrap up our introduction to parallel programming by learning how data flow principles can be used to increase the amount of parallelism in a program. We will learn how Java’s Phaser API can be used to implement “fuzzy” barriers, and also “point-to-point” synchronizations as an optimization of regular barriers by revisiting the iterative averaging example. Finally, we will also learn how pipeline parallelism and data flow models can be expressed using Java APIs.
4.1 Split-phase Barriers with Java Phasers•5 minutes
4.2 Point-to-Point Sychronization with Phasers•5 minutes
4.3 One-Dimensional Iterative Averaging with Phasers•4 minutes
4.4 Pipeline Parallelism•5 minutes
4.5 Data Flow Parallelism•5 minutes
Phaser Examples•6 minutes
Pipeline & Data Flow Parallelism•7 minutes
7 readings•Total 70 minutes
4.1 Lecture Summary•10 minutes
4.2 Lecture Summary•10 minutes
4.3 Lecture Summary•10 minutes
4.4 Lecture Summary•10 minutes
4.5 Lecture Summary•10 minutes
Mini Project 4: Using Phasers to Optimize Data-Parallel Applications•10 minutes
Exit Survey•10 minutes
1 assignment•Total 30 minutes
Module 4 Quiz•30 minutes
1 programming assignment•Total 180 minutes
Mini Project 4 Submission•180 minutes
Continue Your Journey with the Specialization "Parallel, Concurrent, and Distributed Programming in Java"
Module 7•20 minutes to complete
Module details
The next two videos will showcase the importance of learning about Concurrent Programming and Distributed Programming in Java. Professor Vivek Sarkar will speak with industry professionals at Two Sigma about how the topics of our other two courses are utilized in the field.
What's included
2 videos1 reading
Show info about module content
2 videos•Total 10 minutes
Industry Professional on Concurrency - Dr. Shams Imam, Software Engineer, Two Sigma•4 minutes
Industry Professional on Distribution - Dr. Eric Allen, Senior Vice President, Two Sigma•7 minutes
1 reading•Total 10 minutes
Our Other Course Offerings•10 minutes
Earn a career certificate
Add this credential to your LinkedIn profile, resume, or CV. Share it on social media and in your performance review.
Instructor
Instructor ratings
Instructor ratings
We asked all learners to give feedback on our instructors based on the quality of their teaching style.
Rice University is consistently ranked among the top 20 universities in the U.S. and the top 100 in the world. Rice has highly respected schools of Architecture, Business, Continuing Studies, Engineering, Humanities, Music, Natural Sciences and Social Sciences and is home to the Baker Institute for Public Policy.
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."
Jennifer J.
Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."
Larry W.
Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."
Chaitanya A.
"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Learner reviews
4.6
1,239 reviews
5 stars
69.03%
4 stars
22.74%
3 stars
6.53%
2 stars
1.12%
1 star
0.56%
Showing 3 of 1239
S
SD
4·
Reviewed on May 25, 2020
I found the explanation of how to precisely code phasors lacking as the Thread stuff was already provided in sample code and never explained. Quite satisfied with the rest of the course though.
R
RA
5·
Reviewed on Dec 26, 2017
Very relevant concepts, explained beautifully by a very experienced professor. The assignments were good, but they could involve more programming for more practice!
A
AB
4·
Reviewed on Jan 27, 2018
Instructor is awesome. However instead of sharing ready libraries for parallelism (like forall loop) in section 3, native codes should be used for forall loops etc.
When will I have access to the lectures and assignments?
To access the course materials, assignments and to earn a Certificate, you will need to purchase the Certificate experience when you enroll in a course. You can try a Free Trial instead, or apply for Financial Aid. The course may offer 'Full Course, No Certificate' instead. This option lets you see all course materials, submit required assessments, and get a final grade. This also means that you will not be able to purchase a Certificate experience.
What will I get if I subscribe to this Specialization?
When you enroll in the course, you get access to all of the courses in the Specialization, and you earn a certificate when you complete the work. Your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile.
Is financial aid available?
Yes. In select learning programs, you can apply for financial aid or a scholarship if you can’t afford the enrollment fee. If fin aid or scholarship is available for your learning program selection, you’ll find a link to apply on the description page.