4 занятия · Практика · Домашки · Собеседования

Многопоточное программирование на Java.

Зайти на курс →
4
занятия по минимум 2.5 часа раз в неделю
4
домашних работы с разбором решения
16
тем разбора
2
групповых собеседования

Программа курса

01

Основы многопоточных приложений

Зачем нужны многопоточные приложения и какие есть ограничения. Как устроена память в Java и как она ограничивает многопоточные приложения и создает основные сложности

02

Что такое поток

Как создать поток. Как проектировать работу потоков. Какие бывают потоки. Потоки-демоны, виртуальные потоки. Когда применять и те и другие.

03

Пулы потоков

Как переиспользовать поток и как создавать пулы потоков. Зачем это нужно. Какие пулы и когда использовать. Пишем свои пулы потоков самостоятельно.

04

Пулы потоков в Java

Используем существующие в Джаве пулы потоков. Обсуждаем возможности пулов потоков. Как правильно использовать их в штатных и исключительных ситуациях.

05

Потокобезопасные приложения

Понятия потокобезопасных приложений. Разбираем состояния потоков и цикл жизни потока. Пишем потокобезопасные приложения с помощью монитора (synchronized). Как устроен waiting set. Какие тонкости его работы. Разбираем основные ошибки и ограничения.

06

Lock striping

Lock striping — подход шардирования локов, используемый в высоконагруженных приложениях. Малоизвестный, но очень важный шаблон.

07

Локи

С решения проблем, которые не может решить Synchronized/Waiting Set, мы перейдем к теме локов. Локи более гибкие, имеют ряд уникальных возможностей. Мы изучим существующие типы локов и оценим их производительность для различных ситуаций. Применим к ним lock striping. Включенные локи — Reentrant/ReadWrite/Stamped.

08

Неблокирующие подходы

Неблокирующие подходы. Потокобезопасные решения для высоких нагрузок. Используем неблокирующий подход (lock free с помощью CAS и VarHandler). Используем lock striping и воссоздадим некоторые производительные классы java.

09

Java.util.concurrent

Переходим к разбору существующих компонентов в java.util.concurrent. Разберем все предоставляемые решения. Зачем то или иное решение существует. Когда и как правильно ипользовать. Рассмотрим: Future/CompletableFuture, ThreadLocal, Phaser, CyclicBarrier, Semaphore. Включая новые ScopedValues, Structured Concurrency (которые еще в preview)

10

Атомики и коллекции

Рассмотрим атомики и многопоточные коллекции. Оценим, какие из них производительные, и сравним их с обычным блокирующим подходом. Посмотрим, что внутри наиболее популярных решений таких, как ConcurrentHashMap. Разберемся, из чего исходить, выбирая ту или иную коллекцию.

11

Асинхронное программирование

Как многопоточка устроена в асинхронщине. Воспользуемся Spring Reactive и сравним его с Virtual Threads.

12

Parallel streams

Как использовать parallel streams, что находится внутри. Какие есть ограничения и как их обходить. Какие есть проблемы и наиболее частые ошибки при использовании parallel streams.

13

Low latency и Сторонние библиотеки

Изучим решения с требованиями к низкой задержке (low latency). Закроем такие темы как Padding/contended. Воспользуемся внешними библиотеками Disruptor, Chronicle collections. Affinity Lock.

14

Happens before / Atomicity / Visibility / Ordering

Вернемся к теории и разберемся с таким понятием как happens before. Рассмотрим какие подходы существуют для создания потокобезопасных решений — volatile/atomic/ordering/visibility.

15

Тестирование

Во время занятий узнаем как тестировать многопоточные решения с помощью разных библиотек. Используем JMH и Jcstress для тестирования приложений на потокобезопаность.

16

Домашние задания и их разборы

После каждого занятия будет выдана домашняя работа и запись её решения. Во время решения я пройдусь по пройденным темам и раскрою некоторые аспекты тех или иных проблем.

Автор - создатель группы KotoJava

Меня зовут Дмитрий. Я разработчик с 15 годами опыта в промышленной разработке. Работал в СНГ и за рубежом (ОАЭ, Великобритания). Последнее место работы — LSEG, Лондонская биржа, где я руководил командой заключения сделок (post-trade). Также работал в трейдерских командах банков Citi и HSBC. Я разработал данный курс. Собрал в нём выжимку почти всех технологий, которые могут пригодиться в разработке многопоточных приложений. Многие из вас пытались изучить многопоточку самостоятельно и наверняка знают, что информации по ней много, но она часто разбросана и мозаична или изложена слишком сложно.

Автор канала «КотоАйти» (ранее известного как Кото Java https://t.me/kotoitgroup и одноименного ютуб канала https://www.youtube.com/@kotojava В своих лекциях я объясняю простым языком, даю примеры для лучшего понимания.

Как этот курс пригодится разработчикам разных уровней

Я рекомендую этот курс джунам и мидлам, чтобы сэкономить годы поисков информации по многопоточке, быстро понять, как именно она устроена.

Сеньорам данный курс позволит детально разобраться в ряде знакомых тем. Прояснить для себя сложные вопросы и, попрактиковаться с менее знакомыми темами: @Contended , тестирования через JCStress , отношения happens-before или сторонних библиотек, таких как Disruptor Affinity Lock Chronicle Collections.

Как проходит курс

Курс состоит из 4х занятий по одному занятию раз в неделю.

Занятия проходят по выходным утром в 10-11ч МСК в виде онлайн урока.

После 2го и 4го занятия я провожу групповые собеседования, чтобы закрепить пройденный материал.

После каждого занятия предусмотрена домашняя работа и запись её решения. Во время разбора я буду давать важные комментарии к материалу.

Каждый урок будет записан и предоставлен для личного просмотра во время и после курса.

На протяжении всего курса можно будет задавать мне вопросы, в том числе во время занятий.

Стоимость и политика возвратов

Загрузка цены...

Курс можно оплатить системой быстрых платежей (в России), для граждан РБ - на карту РБ. Для других стран - на карты mastecard/visa, в приложении PayPal, банках Revolut, Wise. Для уточнений пишите на канал.

Если Вам не понравилась первая лекция и вы не хотите продолжать я оформлю возврат полной стоимости.

Я официально работаю как самозанятый и работаю с компаниями, поэтому ваш работодатель может оплатить этот курс.