We may earn an affiliate commission when you visit our partners.
Course image
Vivek Sarkar

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.

Read more

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).

Enroll now

What's inside

Syllabus

Welcome to the Course!
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.
Read more
Task Parallelism
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.
Functional Parallelism
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.
Talking to Two Sigma: Using it in the Field
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.
Loop Parallelism
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.
Data flow Synchronization and Pipelining
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.
Continue Your Journey with the Specialization "Parallel, Concurrent, and Distributed Programming in Java"
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.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Provides a theoretical foundation that equips learners to use other parallel programming systems in the future
Covers industry-standard frameworks and techniques for parallel Java programming
Provides hands-on experience through regular mini-projects
Accessible through online forums for individualized support
Taught by Professor Vivek Sarkar, an authority in parallel programming with industry experience
Requires prior programming knowledge but may require additional self-study for those new to parallel programming

Save this course

Save Parallel Programming in Java to your list so you can find it easily later:
Save

Reviews summary

Well-received java parallel programming

Students say this course provides a solid introduction to parallel programming using Java. Many students also found the included explanations, quizzes, and mini projects to be helpful. Overall, this course has largely positive feedback. However, some students note that it could be improved with more difficult assignments, clearer documentation, and more engaging mini-projects.
The mini projects are designed to be engaging and help learners apply their knowledge.
"I just learned a lot also it is not just about the code but you will learn about the academic way of parallelism."
"This Course was amazing with good mini projects that are sometimes challenging and makes you review the videos one more time to be able to solve it correctly"
"The mini projects at the end of each week gives some practice and are helpful in reinforcing the concept/s again."
Concepts are explained clearly and effectively.
"T​he last split average array example can have more graphic to illustrate for ease to understand the problem and solution for the last project."
"The concepts are explained well."
"The lectures and readings were very helpful."
The included assignments help learners practice the concepts covered in the lectures.
"I found this course very useful."
"The course materials and the teaching style will make you understand several complicated topics with confidence and ease."
"The included explanations, quizzes, and mini projects to be helpful."
The auto-grader can be unreliable, which can be frustrating for learners.
"The expected time for mini-projects is extremely overestimated. In weeks 3 and 4 it takes about 5 minutes to complete the mini-project if you watch the video lectures carefully."
"Could have had more demonstrations, or even examples for reference. Overall, it was a very good course."
"The grader is not reliable, you can find that same code sent twice will result in fail and pass. Also, when running test locally, it may fail, while passing when send for real"
The course relies on a custom parallel programming library, which may not be as useful in real-world applications.
"I suggest to improve examples about Phasers, maybe it would be better to introduce low complexity problems in the examples and a step by step explanation on how it works and... where did the threads came from?"
"Too much abstract pseudocode for a Java course."
"The grader is not accurate, I spent some hours trying to find the way to improve the code in the last miniproject because the one I uploaded failed the 4 cores test, but I uploaded the same again and passed the test..."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Parallel Programming in Java with these activities:
Review algebra
Algebra is used throughout the course to derive and solve equations.
Show steps
  • Take notes on the concepts and procedures of algebra.
  • Do 10 практике problems in algebra.
  • Take a practice quiz in algebra.
Practice writing Java code
Writing practice code helps prepare for the coding projects in the course.
Browse courses on Java Programming
Show steps
  • Create a Java program that prints "Hello, world!"
  • Write a Java program that takes two numbers as input and prints their sum.
  • Write a Java program that takes a number as input and prints its factorial.
Review Java fundamentals
Refreshing your knowledge of Java fundamentals will help you understand the core concepts of parallel programming more easily.
Show steps
  • Review the basics of Java syntax, data types, and control flow.
  • Practice writing simple Java programs to reinforce your understanding.
One other activity
Expand to see all activities and additional details
Show all four activities
Explore Java concurrency tutorials
Following tutorials on Java concurrency will provide you with practical examples and hands-on experience in parallel programming.
Show steps
  • Find online tutorials or courses that cover Java concurrency.
  • Go through the tutorials and practice the examples provided.
  • Implement the concepts learned in your own Java programs.

Career center

Learners who complete Parallel Programming in Java will develop knowledge and skills that may be useful to these careers:
Software Developer
A Software Developer is responsible for designing, developing, testing, and deploying software applications. This course can help you build a foundation in parallel programming, a valuable skill for Software Developers who need to create high-performance software applications. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Computer Programmer
Computer Programmers write and maintain code for a variety of software applications. This course can help you develop the skills you need to write parallel code, which can improve the performance of your applications. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Computer Scientist
Computer Scientists conduct research in various areas of computing, including parallel programming. This course can help you build a foundation in parallel programming, which can be beneficial for Computer Scientists who want to conduct research in this area. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Data Scientist
Data Scientists use data to solve problems and make predictions. This course can help you develop the skills you need to use parallel programming to analyze large datasets more efficiently. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Systems Engineer
Systems Engineers design, develop, and maintain computer systems. This course can help you build a foundation in parallel programming, which can be valuable for Systems Engineers who need to design and develop high-performance computing systems. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Software Architect
Software Architects design the architecture of software applications. This course can help you develop the skills you need to design parallel software applications. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for designing efficient parallel software.
Software Engineer
Software Engineers design, develop, test, and deploy software applications. This course can help you build a foundation in parallel programming, which can be valuable for Software Engineers who need to create high-performance software applications. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Web Developer
Web Developers design and develop websites. This course can help you develop the skills you need to create high-performance websites. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Mobile Developer
Mobile Developers design and develop mobile applications. This course can help you develop the skills you need to create high-performance mobile applications. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Game Developer
Game Developers design and develop video games. This course can help you develop the skills you need to create high-performance video games. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Embedded Systems Engineer
Embedded Systems Engineers design and develop embedded systems. This course can help you build a foundation in parallel programming, which can be valuable for Embedded Systems Engineers who need to design and develop high-performance embedded systems. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Robotics Engineer
Robotics Engineers design and develop robots. This course can help you build a foundation in parallel programming, which can be valuable for Robotics Engineers who need to design and develop high-performance robots. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Artificial Intelligence Engineer
Artificial Intelligence Engineers design and develop artificial intelligence systems. This course may be useful for Artificial Intelligence Engineers who want to learn about parallel programming, which can be used to improve the performance of artificial intelligence systems. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Machine Learning Engineer
Machine Learning Engineers design and develop machine learning systems. This course may be useful for Machine Learning Engineers who want to learn about parallel programming, which can be used to improve the performance of machine learning systems. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.
Data Analyst
Data Analysts collect, clean, and analyze data to identify trends and patterns. This course may be useful for Data Analysts who want to learn about parallel programming, which can be used to analyze large datasets more efficiently. The course covers topics such as task parallelism, functional parallelism, loop parallelism, and data flow synchronization, all of which are essential for writing efficient parallel code.

Reading list

We've selected nine books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Parallel Programming in Java.
Comprehensive guide to Java concurrency, covering everything from the basics of thread safety to advanced topics such as lock-free programming. It is an essential read for anyone who wants to write high-performance, scalable Java applications.
Provides a comprehensive guide to Java performance tuning. It covers a wide range of topics, including memory management, thread tuning, and garbage collection. It great resource for anyone who wants to learn how to write high-performance Java applications.
Provides a set of 78 concise, practical tips for writing better Java code. It covers a wide range of topics, including object-oriented design, concurrency, and performance. It great resource for anyone who wants to improve their Java programming skills.
Fast-paced, visual guide to Java programming. It great resource for beginners who want to learn the basics of Java quickly and easily.
Comprehensive guide to Java programming for beginners. It covers a wide range of topics, including object-oriented design, data structures, and algorithms. It great resource for anyone who wants to learn the basics of Java.
Comprehensive guide to Java programming. It great resource for anyone who wants to learn the basics of Java, as well as more advanced topics such as object-oriented design and design patterns.
Comprehensive guide to Java programming. It great resource for anyone who wants to learn the basics of Java, as well as more advanced topics such as object-oriented design and design patterns.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Parallel Programming in Java.
Computer System Design: Advanced Concepts of Modern...
Most relevant
Parallel programming (Scala 2 version)
Most relevant
Parallel programming
Most relevant
Distributed Programming in Java
Most relevant
Introduction to High-Performance and Parallel Computing
Most relevant
Advanced .NET with TPL & PLINQ: Conducting Performance...
Most relevant
Create Your First Multithreaded Application in Java
Most relevant
Learn Parallel Programming with C# and .NET
Java Multithreading, Concurrency & Performance...
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser