Освоение потоков в Java — практический и насыщенный курс, который поможет вам уверенно работать с многопоточностью, понять ключевые принципы параллелизма и научиться избегать распространённых ошибок при работе с потоками.
Что вы узнаете на курсе
Материал подаётся от простого к сложному: от базовой работы с потоками до продвинутых инструментов высокоуровневой синхронизации. Вы разберёте законы, позволяющие писать корректный многопоточный код, научитесь диагностировать состояние гонки и тупики, а также поймёте, как упрощать разработку с помощью современных API.
Основы многопоточности
Создание и запуск потоков
Жизненный цикл потоков
Разбор состояний потока и их влияния на производительность
Правила и принципы корректного многопоточного кода
Модели памяти и их влияние на поведение программы
Синхронизация и видимость данных
Как избежать распространённых ошибок при работе с потоками
Высокоуровневые конструкции и современные API
Использование ExecutorService и пулов потоков
Блокирующие и неблокирующие очереди
Инструменты из java.util.concurrent
Практические упражнения
Каждый раздел курса завершается заданиями, позволяющими закрепить материал. Некоторые упражнения — например, создание собственного ThreadPool — стали классикой и давно проверяют уровень Java-разработчиков. Выполняя их, вы поймёте реальные механизмы взаимодействия потоков и научитесь проектировать потокобезопасные классы.
Используемые технологии
Курс основан на OpenJDK 11 и включает демонстрации нового синтаксиса var. Однако даже разработчики, знакомые только с Java 6 или 7, смогут без проблем следовать материалам.
Для кого предназначен курс
Мы тщательно отобрали темы, чтобы создать концентрированный, но при этом эффективный курс, который даст практические навыки для ежедневной разработки. После прохождения материала вопросы по многопоточности на собеседованиях станут значительно проще.
Если вам нужен более глубокий уровень
«Освоение потоков» — это вводный курс по параллелизму. Для продвинутого изучения производительности и тонкостей параллельных алгоритмов рекомендуем также курс Extreme Java — Concurrency Performance.
Урок 1.00:02:48
Mastering Threads
Урок 2.00:04:31
Hearty Welcome
Урок 3.00:01:09
Basics of Threads
Урок 4.00:01:29
Why Use Threads?
Урок 5.00:03:07
Threading Models
Урок 6.00:02:14
Parallel Computing
Урок 7.00:01:54
Concurrent Computing
Урок 8.00:02:18
Java Memory Model (JSR 133)
Урок 9.00:01:45
Creating New Thread
Урок 10.00:00:55
New Thread with Runnable
Урок 11.00:03:15
ThreadGroups
Урок 12.00:02:04
What Can We Do With ThreadGroups?
Урок 13.00:04:46
Shared Memory with Multithreading
Урок 14.00:09:49
Synchronized
Урок 15.00:03:36
Thread States
Урок 16.00:05:23
Inter-thread communication
Урок 17.00:00:54
Priorities
Урок 18.00:00:53
java.util.Timer
Урок 19.00:00:33
Daemon Threads
Урок 20.00:02:38
Exercise 2.1
Урок 21.00:10:17
Exercise 2.1 Walkthrough
Урок 22.00:00:33
Exercise 2.2
Урок 23.00:02:02
Exercise 2.2 Walkthrough
Урок 24.00:01:26
The Secrets of Concurrency
Урок 25.00:08:19
Sabotaged Doorbell
Урок 26.00:09:16
Distracted Spearfisherman
Урок 27.00:09:08
Overstocked Haberdashery
Урок 28.00:04:15
Blind Spot
Урок 29.00:04:52
Leaked Memo
Урок 30.00:01:56
Corrupt Politician
Урок 31.00:03:04
Micromanager
Урок 32.00:04:49
Cretan Driving
Урок 33.00:03:22
Sudden Riches
Урок 34.00:03:49
Uneaten Lutefisk
Урок 35.00:00:58
Exercise 3.1
Урок 36.00:02:17
Exercise 3.1 Walkthrough
Урок 37.00:00:34
Exercise 3.2
Урок 38.00:07:02
Exercise 3.2 Walkthrough
Урок 39.00:00:25
Exercise 3.3
Урок 40.00:01:21
Exercise 3.3 Walkthrough
Урок 41.00:00:23
Applied Threading Techniques
Урок 42.00:00:58
Executors
Урок 43.00:02:12
ExecutorService
Урок 44.00:01:04
Callable and Future
Урок 45.00:05:09
Executor Example
Урок 46.00:02:12
CompletionService
Урок 47.00:01:48
CountDownLatch
Урок 48.00:01:50
Semaphore
Урок 49.00:01:03
BlockingQueues
Урок 50.00:00:52
ArrayBlockingQueue
Урок 51.00:00:40
LinkedBlockingQueue
Урок 52.00:00:42
PriorityBlockingQueue
Урок 53.00:00:11
DelayQueue
Урок 54.00:00:28
SynchronousQueue
Урок 55.00:01:31
Unhandled Exceptions
Урок 56.00:01:36
ThreadLocal
Урок 57.00:01:42
Stopping Threads
Урок 58.00:02:06
Shutdown Hooks
Урок 59.00:00:25
Exercise 4.1
Урок 60.00:03:04
Exercise 4.1 Walkthrough
Урок 61.00:00:11
Exercise 4.2
Урок 62.00:01:55
Exercise 4.2 Walkthrough
Урок 63.00:01:23
Exercise 4.3
Урок 64.00:01:15
Exercise 4.3 Walkthrough
Урок 65.00:01:03
Exercise 4.4
Урок 66.00:04:51
Exercise 4.4 Walkthrough
Урок 67.00:00:31
Threading Problems
Урок 68.00:02:34
Race Condition
Урок 69.00:01:38
Demo of Simple Race Condition
Урок 70.00:03:10
Repairing Race Condition with synchronized
Урок 71.00:03:21
Repairing Race Condition with Atomics
Урок 72.00:01:01
Repairing Race Condition with LongAdder
Урок 73.00:01:14
Repairing Race Condition with Local Confinement and Merge
JavaSpecialists был основан в 1998 году, чтобы предлагать экспертные консультации по Java и контрактные услуги. В 1999 году мы начали преподавать курс практического обучения Брюса Экеля в Кейптауне, Южная Африка. Позже в 1999 году нас попросили предложить консалтинговые услуги компании ERP в Германии. В 2000 году мы начали публиковать информационный бюллетень специалистов по Java ™. В 2001 году мы начали писать и преподавать наши собственные курс