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
Introduction
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
Resolve the captcha to access the links!