«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.