Многопоточное программирование в Java в частности и в программировании вообще является обширной и сложной темой. В связи с изменениями в процессоростроении, произошедшими уже упочти 15 лет назад многопоточное программирование выходит в скиллах программиста low-latency систем на первый план. Для самостоятельного вдумчивого освоения этой темы требуется уйма времени и хороший учебный материал.
Если вы изучаете тему concurrency в Java с полного нуля, то лучше для начала обратиться просто к хорошему учебнику по Java, где будут изложены основы: как создаются потоки, как они переходят из одного состояния в другое, как они взаимодействуют друг с другом и как обрабатывают исключения. После этого стоит переходить к «мясу»:
Java Concurrency in Practice

Классика жанра. Настольная книга. Основы работы с потоками даются в начале книги для освежения памяти, а дальше в книге освящаются проблемы, которые могут возникнуть у опрометчивого программиста, который посчитал, что он с многопоточным программированием уже разобрался. Книга на английском вышла в 2006 году, но до сих пор является актуальной и хорошей основой для понимания нюансов concurrency в современной Java. Она давно переведена на русский язык.
The Art of Multiprocessor Programming

Книга написана выдающимися учеными и лекторами Морисом Херлихи и Ниром Шавитом. Несмотря на свой академизм в первой части, дает множество практических знаний во второй части. Чтение первой части нужно для теоретического минимума тем, кто не изучал параллельные системы в университете и разбирается с этой темой самостоятельно. Без чтения первой части было бы трудно понимать смысл и объяснения второй.
Первое издание книги вышло в 2008 году. Репринт этого издания был сделан в 2012 году. А в октябре 2020 года вышло 2-е издание этой книги.
Programming Concurrency on the JVM

Оказывается многопоточные программы можно создавать не только классом Thread и интерфейсом Runnable. Есть и другие модели многопоточного программирования, реализованные в других языках. Ознакомиться с ними будет интересно, чтобы расширить свои горизонты и понимать, что для решения одной и той же задачи есть разные подходы. Книга вышла в 2011 году.
Устаревшее

Если вам попалась устаревшая книга «Java Threads: Understanding and Mastering Concurrent Programming, 2nd Edition«, не тратьте на нее времени. Второе издание, вышедшее аж в 1999 году, не представляет никакого интереса. Для своего времени это было прекрасное введение в concurrency в Java. Но увы, устарело.
Третье издание вышло в 2004 году. Оно уже рассказывает о механизмах concurrency из Java 5.0, чем уже вполне можно пользоваться и изучать.
Автор этой книги Scott Oaks написал также хорошую книгу Java Performance, о которой я упоминаю в отдельной статье.
Свеженькое и новенькое
Развитие concurrency в Java не стоит на месте. Общее направление, заданное в Java 5, постоянно совершенствуется и развивается. Добавляются новые классы, структуры данных и реализации (ForkJoin), которые позволяют писать асинхронный код (Future, CompletableFuture), делать изощренные синхронизации (Phaser, Exchanger). Обо всех этих новинках можно узнать из презентаций, статей и новых книг по каждой новой версии Java.
В заключение
Реализация потоков в Java не всегда была такой красивой и гладкой. До версии Java 1.4 реализация очень сильно хромала, заставляя Java-программистов выворачиваться наизнанку, чтобы в многопоточной программе избежать ошибок и неожиданных багов. Ни за что не соглашайтесь писать многопоточный код на Java 1.4 (и еще: не соглашайтесь писать вообще никакой код на Java 1.4, не читайте книг по Java версии 1.4 и ниже и не прикасайтесь к приложениям, которые требуют Java 1.4 — если такие вообще еще остались).

Книга Дага Ли поставила точку в этой дискуссии. Даг Ли показал в своей книге, где в Java сделаны ошибки, и как их нужно исправить. Для начала Даг Ли реализовал свои решения в сторонней concurrency-библиотеке, а потом его реализация вошла в состав Java 5, от которой мы ведем отсчет хорошей полноценной непротиворечивой Java Memory Model и всех утилит и классов, которыми пользуемся сейчас. Книга написана аж в 1999 году. Почитайте ее хотя бы ради интереса.
Порекомендуйте книгу по проектированию ПО и систем. От разделения ответственности между классами до принципов разделения на сервисы (процессы). Возможно публикация, а не книга. Хотелось бы четче понять принципы которомы руководствоваться. Спасибо
НравитсяНравится 1 человек