Как освоить многопоточное программирование
Как вы знаете, у меня есть классный курс по многопоточке. Он классный и сильно упрощает освоение темы. Но не всем подходит такой формат, поэтому поделюсь планом, как разобраться в теме самостоятельно.
Многопоточность — сложная часть java core, поэтому разработчика от неё часто ограждают. Большинство проектов используют модель thread-per-request: каждый запрос изолирован, и взаимодействия потоков как будто нет.
Во многих проектах знания многопоточки не понадобятся, особенно если вы джуниор или мидл. Но чем выше нагрузка, тем сложнее поддерживать изоляцию. Так что рекомендую уделить этой теме внимание.
Теория
Шаг 1: любой курс на ютубе или юдеми для быстрого обзора
Шаг 2: книга Java Concurrency in Practice + документация к каждому классу java.util.concurrent
В книге отлично описаны основы и возможные проблемы многопоточки. Многие практические решения устарели, поэтому ищите в JDK альтернативы.
Шаг 3: видяшки Романа Елизарова и Алексея Шипилёва
Дают хороший ответ на вопросы "почему" и "зачем". Смотреть только после предыдущего шага, иначе можно утонуть в деталях и не понять главного
Шаг 4 (опциональный): прочитать The Art of Multiprocessor Programming
Не про джаву, но теоретические аспекты многопоточности раскрыты на тысячу процентов.
❓Почему так много теории?
Потому что между железом, внутрянкой JVM и архитектурой сервера очень тесная связь. Без этого фундамента получаются такие ситуации:
😟 Локально всё работает, тесты проходят, а на продакшене непонятные ошибки
😟 Одна многопоточная фича работает, но почему-то отваливается другая
😟 Вроде ничего не сделал, а метрики стали в два раза хуже
Практика
Идеальный вариант — делать многопоточные задачки под присмотром опытных коллег. Если такой возможности пока нет:
🔸 Поискать куски многопоточки в текущем проекте. Даже если их мало, разберите от и до — что, зачем, почему такие параметры, как можно по-другому
🔸 Изучить код опенсорсных проектов, которые точно содержат многопоточку — Kafka, Hadoop, Tinkoff invest API, etc
С этим багажом можно спокойно идти на собеседование в классный проект и нарабатывать навыки + периодически повторять материалы из шага 2
Или всё же взять курс, где вся теория шаг за шагом + море практики на основе реальных задач:)
Как вы знаете, у меня есть классный курс по многопоточке. Он классный и сильно упрощает освоение темы. Но не всем подходит такой формат, поэтому поделюсь планом, как разобраться в теме самостоятельно.
Многопоточность — сложная часть java core, поэтому разработчика от неё часто ограждают. Большинство проектов используют модель thread-per-request: каждый запрос изолирован, и взаимодействия потоков как будто нет.
Во многих проектах знания многопоточки не понадобятся, особенно если вы джуниор или мидл. Но чем выше нагрузка, тем сложнее поддерживать изоляцию. Так что рекомендую уделить этой теме внимание.
Теория
Шаг 1: любой курс на ютубе или юдеми для быстрого обзора
Шаг 2: книга Java Concurrency in Practice + документация к каждому классу java.util.concurrent
В книге отлично описаны основы и возможные проблемы многопоточки. Многие практические решения устарели, поэтому ищите в JDK альтернативы.
Шаг 3: видяшки Романа Елизарова и Алексея Шипилёва
Дают хороший ответ на вопросы "почему" и "зачем". Смотреть только после предыдущего шага, иначе можно утонуть в деталях и не понять главного
Шаг 4 (опциональный): прочитать The Art of Multiprocessor Programming
Не про джаву, но теоретические аспекты многопоточности раскрыты на тысячу процентов.
❓Почему так много теории?
Потому что между железом, внутрянкой JVM и архитектурой сервера очень тесная связь. Без этого фундамента получаются такие ситуации:
😟 Локально всё работает, тесты проходят, а на продакшене непонятные ошибки
😟 Одна многопоточная фича работает, но почему-то отваливается другая
😟 Вроде ничего не сделал, а метрики стали в два раза хуже
Практика
Идеальный вариант — делать многопоточные задачки под присмотром опытных коллег. Если такой возможности пока нет:
🔸 Поискать куски многопоточки в текущем проекте. Даже если их мало, разберите от и до — что, зачем, почему такие параметры, как можно по-другому
🔸 Изучить код опенсорсных проектов, которые точно содержат многопоточку — Kafka, Hadoop, Tinkoff invest API, etc
С этим багажом можно спокойно идти на собеседование в классный проект и нарабатывать навыки + периодически повторять материалы из шага 2
Или всё же взять курс, где вся теория шаг за шагом + море практики на основе реальных задач:)