«Java Concurrency на практике» и JSR 166.

Недавно я помогал одному молодому разработчику в распиле монолитного приложения. В ходе работы пришлось немного пообсуждать матчасть вокруг паттернов и многопоточного программирования. В итоге пришлось «ударить» человека классической книгой «Java Concurrency на практике».

Изначально я познакомился с ней на языке оригинала, позже передал ее в дар молодым аспирантам. Каково же было мое удивление, что книгу можно купить на русском языке. И это всё благодаря издательству «Питер». Это настоящая классика:

Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea — Java Concurrency in Practice Брайан Гетц, Тим Пайерлс, Джошуа Блох, Джозеф Боубер, Дэвид Холмс, Даг Ли — «Java Concurrency на практике» или тут

Среди авторов книги надо выделить Doug Lea, он возглавлял движуху вокруг JSR 166. JSR 166 — это спецификация, официально называемая «Concurrency Utilities», то есть «Утилиты для работы с параллелизмом» для платформы Java. Надо сказать, что примерно в 2004 году благодаря этому JSR в Java 5 появился пакет java.util.concurrent. Это был настоящий прорыв для разработчиков, столкнувшихся с многопоточностью.

Не передать словами, как много было радости от появления java.util.concurrent — основного пакета, реализующего новые классы и интерфейсы для организации параллелизма. Появился Executor framework — удобная модель управления пулом потоков (ThreadPool), например, через интерфейсы Executor, ExecutorService, классы ThreadPoolExecutor. В то же время катнули коллекции с поддержкой потокобезопасности — такие как ConcurrentHashMap, CopyOnWriteArrayList и др.

Всё это тут же включали в работу вместо примитивных synchronized блоков. Это как пересесть с велосипеда на спорткар. Надо сказать, что сразу после релиза, может чуть больше года, Брайан Гетц с соавторами выпустили выше обозначенную книгу, ставшую библией по этой теме. Помню, как мне подарили книгу и я взял её в руки — такое чувство, будто получил ключи от Ferrari! 🏎️

Что особенно круто — книга не просто описывает API, а объясняет фундаментальные концепции: visibility, atomicity, ordering. Без понимания этих вещей любой код с потоками превращается в русскую рулетку.

И хотя с тех пор прошло почти 20 лет, принципы, описанные там, актуальны до сих пор. Эта книга дает твердую базу для любого человека, взявшегося писать многопоточный код на Java.

«Java Concurrency на практике» и JSR 166.
Недавно я помогал одному молодому разработчику в распиле монолитного приложения | Сетка — социальная сеть от hh.ru