Complete Guide to Parallel and Concurrent Programming with Java
4h 26mIntermediate2025-01-15
Authors

Barron Stone
Electrical Engineer
Course details
Parallel programming unlocks a program’s ability to execute multiple instructions simultaneously, increases the overall processing throughput, and is key to writing faster and more efficient applications. In this course, join instructors Barron and Olivia Stone as they introduce the basics of parallel programming in Java, providing the foundational knowledge you need to write more efficient, performant code. Barron and Olivia explain concepts like threading and mutual exclusion in a fun and informative way, relating them to everyday activities you perform in the kitchen. To cement the ideas, they demo them in action using Java. Each lesson is short and practical, driving home the theory with hands-on techniques.
Learning objectives
By the end of this course, learners will be able to analyze the performance impact of parallel programming techniques, evaluating the trade-offs and applying the appropriate parallel programming patterns to optimize the throughput and efficiency of their Java applications.
Learning objectives
By the end of this course, learners will be able to analyze the performance impact of parallel programming techniques, evaluating the trade-offs and applying the appropriate parallel programming patterns to optimize the throughput and efficiency of their Java applications.
Skills covered
JavaProgramming FoundationsOracleProgramming LanguagesSoftware DevelopmentOne-Off
Concepts
0. Introduction
- 01 - Learn parallel programming basics
- 02 - What you should know
- 03 - Java SDK and IntelliJ IDEA
1. Parallel Computing Hardware
- 04 - Sequential vs. parallel computing
- 05 - Parallel computing architectures
- 06 - Shared vs. distributed memory
2. Threads and Processes
- 07 - Thread vs. process
- 08 - Thread vs. process - Java demo
- 09 - Concurrent vs. parallel execution
- 10 - Execution scheduling
- 11 - Execution scheduling - Java
- 12 - Thread lifecycle
- 13 - Thread lifecycle - Java demo
- 14 - Thread attributes - Java demo
- 15 - Runnable vs. thread - Java demo
- 16 - Daemon thread
- 17 - Daemon thread - Java demo
3. Mutual Exclusion
- 18 - Data race
- 19 - Data race - Java demo
- 20 - Mutual exclusion
- 21 - Mutual exclusion - Java demo
- 22 - Atomic variable - Java demo
- 23 - Synchronized method - Java demo
- 24 - Synchronized statement - Java demo
4. Locks
- 25 - Reentrant lock
- 26 - Reentrant lock - Java demo
- 27 - Try lock
- 28 - Try lock - Java demo
- 29 - Read-write lock
- 30 - Read-write lock - Java demo
5. Liveness
- 31 - Deadlock
- 32 - Deadlock - Java demo
- 33 - Abandoned lock
- 34 - Abandoned lock - Java demo
- 35 - Starvation
- 36 - Starvation - Java demo
- 37 - Livelock
- 38 - Livelock - Java demo
6. Synchronization
- 39 - Condition variable
- 40 - Condition variable - Java demo
- 41 - Producer consumer
- 42 - Producer consumer - Java demo
- 43 - Semaphore
- 44 - Semaphore - Java demo
7. Barriers
- 45 - Race condition
- 46 - Race condition - Java demo
- 47 - Barrier
- 48 - Barrier - Java demo
- 49 - CountDownLatch - Java demo
8. Asynchronous Tasks
- 50 - Computational graph
- 51 - Thread pool
- 52 - Thread pool - Java demo
- 53 - Future
- 54 - Future - Java demo
- 55 - Divide and conquer
- 56 - Divide and conquer - Java demo
9. Evaluating Parallel Performance
- 57 - Speedup, latency, and throughput
- 58 - Amdahl's law
- 59 - Measure speedup
- 60 - Measure speedup - Java demo
10. Designing Parallel Programs
- 61 - Partitioning
- 62 - Communication
- 63 - Agglomeration
- 64 - Mapping
11. Challenge Problems
- 65 - Welcome to the challenges
- 66 - Challenge - Matrix multiply in Java
- 67 - Solution - Matrix multiply in Java
- 68 - Challenge - Merge sort in Java
- 69 - Solution - Merge sort in Java
- 70 - Challenge - Download images in Java
- 71 - Solution - Download images in Java
Conclusion
- 72 - Next steps
- 73 - Additional resources