Java Multithreading, Concurrency & Performance Optimization

Java Multithreading, Concurrency & Performance Optimization

English | MP4 | AVC 1280×720 | AAC 44KHz 2ch | 34 lectures (4h 17m) | 963 MB

Become an expert in Multithreading, Concurrency & Parallel programming in Java, with strong emphasis on high performance

If you had your own jet plane, would you drive it to the grocery store, or fly it on a tour around the world?

Today every computer and phone comes with immense computing power and multiple cores that allow for full parallelism. In this course, you will go on a journey to learn all the fundamental tools you need to become a confident and successful multithreaded application developer. Using multithreading and concurrency we will learn to get the most out of our computer to truly make it fly!

Teaching Philosophy

The course is designed to teach you “how to fish”. Instead of memorizing classes, libraries, or Java APIs, we will learn the fundamentals of multithreaded programming, starting from the complete basics, all the way to the very advanced topics in multithreading.

All lectures include the right theory and are accompanied by practical examples from relevant fields such as:

  • User Interface applications
  • Image Processing
  • Web Applications
  • Computational programs
  • And others

It’s a practical course that is meant to save you time. Instead of filling hours of material, I hand-picked the most important topics based on my practical experience.

We will learn

  • Operating Systems fundamentals and motivation for multithreading and concurrency.
  • The basics of multithreading – how to create threads in Java as well as communicate between threads in Java.
  • Performance considerations and design patterns of multithreaded and parallel applications. Optimizing for latency or throughput.
  • Data sharing between threads in Java. All the pitfalls and challenges as well as the solutions and best practices.
  • Advanced lock-free algorithms and data structures for increased responsiveness and performance.
Table of Contents

1 Motivation & Operating Systems fundamentals- Part 1
2 Operating Systems Fundamentals – Part 2

Threading fundamentals – Thread Creation
3 Tips about Coding Lectures and Debugging Instructions
4 Threads Creation – Part 1, Thread Capabilities & Debugging
5 Threads Creation – Part 2. Thread Inheritance
6 Thread Creation – MultiExecutor Solution

Threading fundamentals – Thread Coordination
7 Thread Termination & Daemon Threads
8 Joining Threads
9 Multithreaded Calculation – Solution

Performance Optimization
10 Introduction to Performance & Optimizing for Latency – Part 1
11 Optimizing for Latency Part 2 – Image Processing
12 Additional Resource – Image Processing, Color Spaces, Extraction & Manipulation
13 Optimizing for Throughput Part 1
14 Optimizing for Throughput Part 2 – HTTP server + Jmeter

Data Sharing between Threads
15 Stack & Heap Memory Regions
16 Resource Sharing & Introduction to Critical Sections

The Concurrency Challenges & Solutions
17 Critical Section & Synchronization
18 Atomic Operations, Volatile & Metrics practical example
19 Min – Max Metrics – Solution
20 Race Conditions & Data Races
21 Locking Strategies & Deadlocks

Advanced Locking
22 ReentrantLock Part 1 – tryLock and interruptible Lock
23 ReentrantLock Part 2 – User Interface Application example
24 Reentrant Read Write Lock & Database Implementation
25 Product Reviews Service – Solution

Inter-Thread Communication
26 Semaphore – Scalable Producer Consumer implementation
27 Condition Variables – All purpose, Inter-Thread Communication
28 Objects as Condition Variables – wait(), notify() and notifyAll()
29 Simple CountDownLatch – Solution

Lock-Free Algorithms, Data-Structures & Techniques
30 Introduction to Non-blocking, Lock Free operations
31 Atomic Integers & Lock Free E-Commerce
32 Atomic References, Compare And Set, Lock-Free High Performance Data Structure

Beyond Multithreading – Final Lecture
33 Distributed Systems, Big Data & Performance
34 Bonus Section