Course Information
Course Overview
Learn Java multi-threading and resolve data and race conditions with volatile, atomics, and synchronized
Learn how to write applications that take full advantage of processor power by parallelizing computations and avoiding idle cycles with Java concurrency and multithreading. This course will cover both the concepts behind multithreading and concurrency with real-world examples and provide practical coding examples that demonstrate how to use the capabilities provided by the JDK.
By the end of this course, you will:
Understand the concepts of processes and threads in operating systems and be able to distinguish between the two.
Define threads in Java using Thread, Runnable, and Callable.
Be familiar with Java thread states and the thread lifecycle.
Know the different ways to start threads, including using .start(), ExecutorService, and .parallelStream() capabilities.
Understand the concept behind the ExecutorService thread reuse strategy.
Understand both blocking and non-blocking mechanisms for working with the Future interface.
Learn about daemon threads.
Be able to use the .join() and .interrupt() thread capabilities.
Understand the concept of data race and how to mitigate it using the volatile keyword.
Be familiar with the race condition concept and the mutex strategy to mitigate it.
Know how to write Java code using the synchronized keyword to implement the mutex paradigm.
Understand the compare-and-swap processor instruction and how it is used in the Java atomics package.
Know when and how to use AtomicInteger.
Learn about the ThreadLocal class.
Be able to take thread dumps of the JVM process.
This course is officially owned and provided by Yestastic Tech Labs LLC.
Course Content
- 6 section(s)
- 33 lecture(s)
- Section 1 Introduction
- Section 2 Inside Computer
- Section 3 Starting Threads
- Section 4 Read/write data race and volatile
- Section 5 Synchronized and atomic
- Section 6 Tips, tricks and outro
What You’ll Learn
- A high-level overview of process management by the operating system
- A high-level overview of thread management by the operating system
- The fundamental difference between a process and a thread
- How to define a thread using the Thread subclassing approach
- How to define a thread by implementing the Runnable interface
- The different states of a thread and its lifecycle
- How to start threads using the start() method and the ExecutorService
- The strategy for reusing threads employed by the ExecutorService
- How to define a thread by implementing the Callable interface
- How to use the Future interface in blocking and non-blocking ways
- The usage of daemon threads
- The functionality of the Thread's .join() and .interrupt() methods
- The concept of data race and its details
- How to use the 'volatile' keyword to avoid data race
- The concept of mutex / intrinsic lock / monitor
- The concept of race condition, its details and difference from the data race
- How to use the 'synchronized' keyword to implement mutex/monitor acquire in Java
- The concept of the compare-and-swap CPU instruction
- A high-level overview of the Java atomics package and its relation to compare-and-swap
- How to use the AtomicInteger class to avoid arithmetic operation race condition
- The usage of the ThreadLocal class in Java
- How to take thread dumps of the JVM process
- How to use the .parallelStream() method in the Java Streaming API
Skills covered in this course
Reviews
-
PPhùng Văn Tiến Đạt
Good course for beginner, Very well-explained
-
FFelipe Matheus D'avila Pereira
Excelente.
-
OOlujimi Otulana
A great introduction course on multithreading especially how it functions at the machine level. A good start if you have just been following practices without understanding the real depth of the processing. However could be a bit more engaging and interactive
-
PPawan Bhatt
Perfect course for beginner. 4 star for explanation......however need more concrete examples that just cashier and alice bob stuff......so reducing one star