4 занятия · Практика · Домашки · Собеседования
Зачем нужны многопоточные приложения и какие есть ограничения. Как устроена память в Java и как она ограничивает многопоточные приложения и создает основные сложности
Как создать поток. Как проектировать работу потоков.
Какие бывают потоки. Потоки-демоны,
виртуальные
потоки. Когда применять и те и другие.
Как переиспользовать поток и как создавать пулы потоков. Зачем это нужно. Какие пулы и когда использовать. Пишем свои пулы потоков самостоятельно.
Используем существующие в Джаве пулы потоков. Обсуждаем возможности пулов потоков. Как правильно использовать их в штатных и исключительных ситуациях.
Понятия потокобезопасных приложений. Разбираем состояния
потоков и цикл жизни потока.
Пишем потокобезопасные приложения с помощью монитора
(synchronized).
Как устроен waiting
set.
Какие тонкости его работы. Разбираем основные ошибки и ограничения.
Lock
striping — подход шардирования локов,
используемый в высоконагруженных приложениях. Малоизвестный, но очень важный шаблон.
С решения проблем, которые не может решить
Synchronized/Waiting
Set,
мы перейдем к теме локов.
Локи более гибкие, имеют ряд уникальных возможностей. Мы изучим существующие типы локов и оценим их
производительность для различных ситуаций.
Применим к ним lock
striping. Включенные локи —
Reentrant/ReadWrite/Stamped.
Неблокирующие подходы.
Потокобезопасные решения для высоких нагрузок. Используем неблокирующий подход
(lock
free с помощью
CAS
и VarHandler).
Используем lock
striping и воссоздадим некоторые производительные классы java.
Переходим к разбору существующих компонентов в java.util.concurrent.
Разберем все предоставляемые решения. Зачем то или иное решение существует.
Когда и как правильно ипользовать. Рассмотрим:
Future/CompletableFuture,
ThreadLocal,
Phaser,
CyclicBarrier,
Semaphore.
Включая новые ScopedValues,
Structured
Concurrency
(которые еще в preview)
Рассмотрим атомики и многопоточные коллекции.
Оценим, какие из них производительные, и сравним их с обычным блокирующим подходом.
Посмотрим, что внутри наиболее популярных решений таких, как
ConcurrentHashMap.
Разберемся, из чего исходить, выбирая ту или иную коллекцию.
Как многопоточка устроена в асинхронщине.
Воспользуемся Spring
Reactive и сравним его с
Virtual
Threads.
Как использовать
parallel
streams,
что находится внутри. Какие есть ограничения и как их обходить.
Какие есть проблемы и наиболее частые ошибки при использовании
parallel
streams.
Изучим решения с требованиями к низкой задержке
(low
latency).
Закроем такие темы как
Padding/contended.
Воспользуемся внешними библиотеками
Disruptor,
Chronicle
collections.
Affinity
Lock.
Вернемся к теории и разберемся с таким понятием как
happens
before.
Рассмотрим какие подходы существуют для создания потокобезопасных решений —
volatile/atomic/ordering/visibility.
Во время занятий узнаем как тестировать многопоточные
решения с помощью разных библиотек.
Используем
JMH
и
Jcstress
для тестирования приложений на потокобезопаность.
После каждого занятия будет выдана домашняя работа и запись её решения. Во время решения я пройдусь по пройденным темам и раскрою некоторые аспекты тех или иных проблем.
Меня зовут Дмитрий. Я разработчик с 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. Для уточнений пишите на канал.
Если Вам не понравилась первая лекция и вы не хотите продолжать я оформлю возврат полной стоимости.
Я официально работаю как самозанятый и работаю с компаниями, поэтому ваш работодатель может оплатить этот курс.