We may earn an affiliate commission when you visit our partners.
Course image
Udemy logo

Java Multithreading, Concurrency & Performance Optimization

Michael Pogrebinsky | Software Architecture, System Design, Java Expert and Top Developer Academy LLC

[Updated to 2023, including Project Loom and Virtual Threads]

Description

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

Read more

[Updated to 2023, including Project Loom and Virtual Threads]

Description

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

Today every computer and phone comes with immense computing power and multiple cores, allowing 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.

Target Student for this Course

  • Students who already have some experience and basic knowledge in programming in Java.

  • Students who want to acquire multithreaded, parallel programming and concurrency skills in a short period of time.

  • Students who are interested in performance optimizations and getting a good foundation in the above-mentioned topics.

  • Students who want to take their careers to the next level. Whether you are a

    • Newly graduate and you're looking to land a dream job.

    • A professional engineer who wants to become a better programmer and improve your skillset.

  • A freelancer who wants to develop his/her own project and is looking to learn how to write efficient multithreaded code.

    Then this course is for YOU.

Short Bio

My passion for multithreading and concurrency started in college, where I worked on a highly scalable, distributed B+ Tree research project sponsored by IBM.

Later I worked as a Computer Architecture Engineer at Intel Corporation and as a Software Engineer in other companies, where I developed many applications and features involving efficient and optimized multithreaded code to deliver real-time video, audio, and data - in education, healthcare, augmented reality, and Ad Tech.

Today I am a Principal Software Engineer and Software Architect. Training and mentoring engineers on all levels are both my job and my passion.

We will learn

  • Operating Systems fundamentals and motivation for multithreading and concurrency.

  • The basics of multithreading - how to create threads in Java and 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.

By the End of the Course

You will be able to

  • Write correct, responsive, and performant multithreaded applications in Java for any purpose and scale.

  • Apply best practices to architect multithreaded applications, algorithms, and libraries.

  • Become knowledgeable in concurrency & parallel programming, which will help you in job interviews, your daily work as an engineer, and your personal projects.

Become an expert in Java Multithreading, Concurrency, and Performance Optimization today.

FAQs

- "Will the course help me with interview questions?"

Yes. The course is focused on helping you become proficient in multithreading and concurrency in general and also master multithreading in Java in particular. You will learn all you need about threads in Java as well as common topics in interview questions involving locking, synchronization in Java, heap and stack memory organization, and so on. Although the course is not focused on interview questions specifically, and there's no way to predict what you will be asked during an interview question, the knowledge you will get will definitely set you apart from other candidates.

- "Does the course cover all threading classes and APIs in Java?"

"No. There are many books and expensive academic courses which cover EVERY single class and API which would take months to finish. In addition, Oracle provides excellent Java Docs that cover and explain every single Java multithreading API and class.

This course is different.

Based on years of experience in the field, I have carefully designed a short curriculum that teaches you all the essentials in a short amount of time.

No fillers. No more wasting time learning things you could read yourself in 5 minutes or don't ever need.

This course will build the foundation for becoming an expert in multithreading and concurrency. And also be able to successfully and easily extend your own knowledge in the future.

- "What if I don't understand something during the course and I have a question, what do I do?"

Not a problem. I am here to help you succeed. Multithreading is not an easy topic; no one is expected to get it all right away. Each lecture has a Q&A section where students can ask questions about the lecture or any follow-up questions about the topic in general. I will answer all the questions promptly and ensure you have all the tools for success.

- "Does the course cover interprocess communication and distributed Systems?"

No. Although those are really interesting and important topics that involve concurrency. They are not directly related to Java multithreading, which is the main topic of the course. We do mention those topics during the course, but they are out of scope and deserve their own course. The concepts, use cases, and challenges are very different than the ones we encounter while optimizing the performance of a single multithreaded Java application, algorithm, or library, so we will not cover them here.

- "Why do I need a separate course for concurrent programming?"

Concurrent programming is fundamentally different than transitional sequential programming. As in every engineering decision, there's always a tradeoff. Parallel and Concurrent programming can have a tremendous positive impact on the application's performance and responsiveness but it is a lot harder to get it right. In this course, we will learn all the caveats, techniques, and best practices to get the most out of multithreaded applications in Java.

Enroll now

What's inside

Learning objectives

  • Build well designed & correct multithreaded applications in java, with confidence.
  • Gain expert-level practical knowledge of modern software architecture & low level programming using threads
  • Create high performance & responsive applications, clients will use and love
  • Learn to utilize your computer and java language using concurrency and parallel programming

Syllabus

Introduction
Motivation & Operating Systems fundamentals- Part 1
Operating Systems Fundamentals - Part 2
Threading and Operating Systems Fundamentals Quiz
Read more
Threading fundamentals - Thread Creation
Tips about Coding Lectures and Debugging Instructions
Threads Creation - Part 1, Thread Capabilities & Debugging
Threads Creation - Part 2. Thread Inheritance
Thread Creation
Thread Creation - MultiExecutor
Thread Creation - MultiExecutor Solution
Threading fundamentals - Thread Coordination
Thread Termination & Daemon Threads
Joining Threads
Multithreaded Calculation
Multithreaded Calculation - Solution
Performance Optimization
Introduction to Performance & Optimizing for Latency - Part 1
Optimizing for Latency Part 2 - Image Processing
Additional Resource - Image Processing, Color Spaces, Extraction & Manipulation
Optimizing for Throughput Part 1
Optimizing for Throughput Part 2 - HTTP server + Jmeter
Data Sharing between Threads
Stack & Heap Memory Regions
Resource Sharing & Introduction to Critical Sections
The Concurrency Challenges & Solutions
Critical Section & Synchronization
Atomic Operations, Volatile & Metrics practical example
Min - Max Metrics
Min - Max Metrics - Solution
Race Conditions & Data Races
Data Races
Locking Strategies & Deadlocks
Advanced Locking
ReentrantLock Part 1 - tryLock and interruptible Lock
ReentrantLock Part 2 - User Interface Application example
ReentrantLock
Reentrant Read Write Lock & Database Implementation
Read-Write Locks
Product Reviews Service
Product Reviews Service - Solution
Inter-Thread Communication
Semaphore - Scalable Producer Consumer implementation
Semaphores - Barrier
Condition Variables - All purpose, Inter-Thread Communication
Objects as Condition Variables - wait(), notify() and notifyAll()
Condition Variables
Simple CountDownLatch
Simple CountDownLatch - Solution
Lock-Free Algorithms, Data-Structures & Techniques
Introduction to Non-blocking, Lock Free operations
Atomic Integers & Lock Free E-Commerce
Atomic References, Compare And Set, Lock-Free High Performance Data Structure
Lock-Free Algorithms, Data-structures & Techniques
Threading Models for High Performance IO
Introduction to Blocking IO
Thread Per Task / Thread Per Request Model
Asynchronous, Non Blocking IO with Thread Per Core Model
Threading Models for High Performance IO - Quiz
Virtual Threads and High-Performance IO
Introduction to Virtual Threads
High Performance IO with Virtual Threads
Virtual Threads Best Practices
Beyond Multithreading - Final Lecture
Distributed Systems, Big Data & Performance
Bonus Lecture - Keep Learning

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Develops foundational principles and advanced applications of Java multithreading, concurrency, and programming
Provides a strong foundation for students with some Java programming experience
Taught by industry experts with practical experience in multithreading and software architecture
Emphasizes real-world application and performance optimization techniques
Covers advanced topics such as lock-free algorithms and data structures
Includes interactive examples and practical exercises for hands-on learning

Save this course

Save Java Multithreading, Concurrency & Performance Optimization to your list so you can find it easily later:
Save

Reviews summary

Informative course with clear explanations

Learners say the presentations are high-quality and explanations are clear. The course progresses gradually from simple to complex topics. The audio is excellent and the pace is perfect. The instructor goes into detail and does not leave any loose ends.

Career center

Learners who complete Java Multithreading, Concurrency & Performance Optimization will develop knowledge and skills that may be useful to these careers:
Computer Architect
Computer Architects design and develop microprocessors and other computing hardware. Concurrency and multithreading is a critical part of modern computer architecture. Gaining a deep understanding of these topics with this course will provide you a strong foundation to work in this field.
High-Performance Computing Architect
High-Performance Computing Architects design and build high-performance computing systems for large organizations, such as hedge funds, research institutions, and government labs. Multithreading is a core competency of the field, and therefore, this course can help you build a strong foundation that will help you excel as a High-Performance Computing Architect.
Software Architect
Software Architects design and develop software systems. They need to be familiar with many different areas of computer science, including concurrency and parallel programming. This course can help you understand the fundamentals of multithreading and parallel programming, which will be valuable for your work in designing and developing software systems.
Graphics Programmer
Graphics Programmers develop software for creating and manipulating images, videos, and other visual content. Concurrency and parallel programming are used extensively in graphics programming to improve performance. This course can help you build the skills needed to develop high-performance graphics applications.
Database Administrator
Database Administrators manage and maintain databases, ensuring that they are available, secure, and performant. Many database systems use multithreading to enhance performance. This course can help you understand how multithreading works in this important enterprise software.
Compiler Engineer
Compiler Engineers make programming languages that are fast, efficient, and easy to use. Some Compiler Engineers go on to work at chip manufacturers like ARM and Intel. Concurrency and parallel programming are foundational concepts in high-performance computing. Therefore, many Compiler Engineers need to be familiar with the principles of multithreading. This course could be a helpful introduction to the subject.
Electronics Engineer
Electronics Engineers design and build electronic circuits and systems. Many electronic systems, such as microprocessors and embedded systems, use multithreading to improve performance. This course can help you gain a better understanding of these systems and make you a more attractive candidate for Electronics Engineer roles.
Data Scientist
Data Scientists use data to solve problems. Given the massive scale of modern datasets, familiarity with multithreading and parallel programming can be valuable in helping to build efficient and scalable data science pipelines. Gaining knowledge of these topics can enhance your ability to process, analyze, and visualize data, which are important aspects of the role of a Data Scientist.
Embedded Software Engineer
Embedded Software Engineers design software for embedded computing systems, which are used in devices like smartphones, self-driving cars, and industrial automation systems. Concurrency and parallel programming are often used for performance in embedded systems because of the high degree of real-time constraints embedded systems face. Gaining knowledge of these topics can help you develop the knowledge and skills needed to succeed as an Embedded Software Engineer.
Computational Scientist
Computational Scientists use computation to solve complex scientific problems. Many scientific problems require high-performance computing to run simulations or analyze data. Knowledge of concurrency and parallel programming can be valuable to develop and utilize high-performance algorithms. This course can help you build a foundation in these topics.
Front-End Engineer
Front-End Engineers develop the user interface of web and mobile applications. In recent years, concurrency has become an important aspect of front-end development because it can increase the responsiveness and performance of applications. While this course does not cover web development, the concepts of concurrency and parallel programming that you will learn can be applied to the work of a Front-End Engineer.
Web Developer
Web Developers design and develop websites and web applications. While this course does not cover web development, the concepts of concurrency and parallel programming that you will learn can be applied to the work of a Web Developer to create highly responsive and performant web applications.
Machine Learning Engineer
Machine Learning Engineers build and maintain machine learning models. Often these models are trained on very large datasets, which can be made more efficient with concurrency and parallel programming. This course may be useful for helping you understand how concurrency can be applied to machine learning.
Concurrency Engineer
Concurrency Engineers help build the infrastructure to handle large numbers of users or situations that require high-performance, scalable systems. With your knowledge of concurrency and thread programming, you may be able to contribute to the development of foundational parts of complex and compute-intensive systems, such as operating systems, databases, and enterprise software. This course may be useful for building the foundation needed to succeed as a Concurrency Engineer.
Quantitative Analyst
Quantitative Analysts use mathematical and statistical modeling, along with data analysis, to make predictions about future events. Most Quantitative Analysts focus on the financial markets. The financial industry has a long history with computers. Knowledge of concurrency and parallel programming is valuable in high-performance computing with large datasets, which is an increasingly popular area of modern finance.

Reading list

We've selected 15 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 Java Multithreading, Concurrency & Performance Optimization.
Classic in the field of Java concurrency and is considered a must-read for anyone wanting to develop multithreaded applications in Java. It covers a wide range of topics, from the basics of multithreading to advanced topics such as lock-free programming and reactive programming. The book is well-written and full of practical examples.
Comprehensive guide to concurrent programming in Java. It covers a wide range of topics, from the basics of multithreading to advanced topics such as lock-free programming and reactive programming.
Collection of 78 best practices for writing Java code. It covers a wide range of topics, including concurrency, performance, and security. The book is written in a clear and concise style and is full of practical advice. It valuable resource for any Java developer.
Practical guide to writing concurrent code. It covers a wide range of topics, from the basics of multithreading to advanced topics such as lock-free programming and reactive programming.
Guide to using RxJava to write concurrent code. RxJava library that makes it easy to write concurrent code by using a reactive programming model.
Practical guide to writing concurrent code. It covers a wide range of topics, from the basics of multithreading to advanced topics such as lock-free programming and reactive programming.
Comprehensive guide to algorithms. It covers a wide range of topics, from the basics of algorithms to advanced topics such as concurrency and security.
Comprehensive guide to algorithms. It covers a wide range of topics, from the basics of algorithms to advanced topics such as concurrency and security.
Comprehensive guide to operating systems. It covers a wide range of topics, from the basics of operating systems to advanced topics such as concurrency and security.
Comprehensive guide to operating systems. It covers a wide range of topics, from the basics of operating systems to advanced topics such as concurrency and security.
Comprehensive guide to computer architecture. It covers a wide range of topics, from the basics of computer architecture to advanced topics such as concurrency and security.
Comprehensive guide to computer organization and design. It covers a wide range of topics, from the basics of computer organization and design to advanced topics such as concurrency and security.
Comprehensive guide to the elements of computing systems. It covers a wide range of topics, from the basics of computing systems to advanced topics such as concurrency and security.

Share

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

Similar courses

Here are nine courses similar to Java Multithreading, Concurrency & Performance Optimization.
Android Multithreading Masterclass
Most relevant
Create Your First Multithreaded Application in Java
Most relevant
Building Multithreaded C# 8 Applications with the Task...
Most relevant
Mastering Multithreading Programming with Go (Golang)
Most relevant
Learn Parallel Computing in Python
Most relevant
Mastering Multithreading with Go
Most relevant
Concurrent Programming in Java
Most relevant
Modern C++ Concurrency in Depth ( C++17/20)
Concurrent Programming in Java with Virtual Threads
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