Багатопоточне програмування на Java

Багатопоточне програмування на Java
ru
29.04.2023
6 г 29 мін 22 сек

Багатопоточка часто залишається “сліпою плямою” у розробників. Багато хто знає про екзекутори, synchronized і volatile, а на практиці пишуть застарілий, повільний та некоректний код.

Чому так відбувається?

Більшість курсів і статей не йде далі класу Thread та екзекуторів. Є хороша книга Java Concurrency In Practice, але вона 2005 року. З того часу з’явилися нові інструменти та нові підходи до написання коду.

Помилки многопоточки виявляються під високим навантаженням. На більшості проектів її немає, тому створюється відчуття “і так норм”.

Але грамотний розробник вбачає вузькі місця системи. Передбачає помилку, яка станеться за місяць і раціонально використовує обчислювальні ресурси.

На курсі я докладно розповім про багатопоток від простого до складного. Покажу найкращі практики та основні помилки, приклади зі свого досвіду та популярних проектів.

Що потрібно для комфортного навчання

Досвід розробки на Java від року
Початкові знання багатопоточності: Thread, Executors, volatile, synchronized
Паттерни проектування GoF
Вмієте писати веб-сервіси на Spring, робити запити до бази даних та писати юніт-тести
Знання git

Що робитимемо

Докладно розбирати кожен клас java.util.concurrent: плюси, мінуси, найкращі практики
Вивчати, як все працює “під капотом”
Підглядати цікаві прийоми у популярних проектах
Шукати помилки та можливі проблеми в коді реального проекту
Порівнювати реалізації між собою
Вимірювати продуктивність у різних умовах
Розбирати питання із співбесід

Також торкнемося:

Прапорці JVM пов’язані з багатопоточністю
Що і як тестувати
Реактивні бібліотеки
Віртуальні потоки

Чого не буде

Алгоритми
Теорія паралельних обчислень
Розподілені обчислення та транзакції

Ви не можете переглядати цей курс -

Array ( [bitrate] => 127407 [filesize] => 21389946 [mime_type] => video/mp4 [length] => 647 [length_formatted] => 10:47 [width] => 1920 [height] => 1080 [fileformat] => mp4 [dataformat] => quicktime [audio] => Array ( [dataformat] => mp4 [bitrate] => 128003 [codec] => ISO/IEC 14496-3 AAC [sample_rate] => 44100 [channels] => 2 [bits_per_sample] => 16 [lossless] => [channelmode] => stereo [compression_ratio] => 0.090705073696145 ) [created_timestamp] => -2082844800 )