Wednesday, September 25, 2019

Top 5 Books to Learn Concurrent Programming and Multithreading in Java - Best, Must Read

Books are essential to learning something new, and despite being in the electronic age, where books have lost some shine to internet and blogs, I still read and recommend them to get complete and authoritative knowledge on any topic, e.g., concurrent programming. In this article, I will share five best books to learn concurrent programming in Java. These books cover basics, starting from how to create and start a thread, parallel programming, concurrency design patterns, an advantage of concurrency and of course pitfalls, issues, and problems introduced due to multithreading. Learning concurrent programming is a difficult task, not even in Java but also in other languages like C++ or modern days JVM languages like Groovy, Scala, Closure, and JRuby.

Since I have been doing active Java development from more than 10 years, I can say that this is the best language to start with concurrent programming, because of its structure, inbuilt concurrency support in terms of synchronized, volatile, and final keyword, and finally because a wealth of information available in internet and community.

Anyway, there is no substitute for writing code and learning from a mistake, but you need a book which can guide, educate and teach you, what others have already learned in threads, concurrency, and parallel programming.

Btw, a good knowledge of fundamental concepts in Java is required before you go deep in multithreading and concurrency. If you are new into Java world,  I suggest you to first go through The Complete Java MasterClass course on Udemy to learn basics and then reading these books would make more sense.




Top 5 Multithreading and Concurrency Books for Java Programmers

Here is my list of books to master thread basics, multi-threading gotchas and principles and patterns of concurrent programming in Java. They will not only teach you what to do but also what not to do. Since multi-threading is a tricky topic, it's better to refer more than one book because you will find you connect to some author better than others.


1. The Art of Multiprocessor Programming
Ideally, this book should be the first book any programmer read on concurrent and multiprocessor programming, it covers academic stuff like classical producer-consumer and readers-writers problem, and explains some fundamentals of multiprocessors and shared memory.

books to learn concurrent programming

The Art of Multiprocessor Programming  Revised by Maurice Herlihy and Nir Shavit is also a must-read for any Java developer, who just know how to use a thread Java but not familiar with essential principles of concurrent programming, like critical sectionmutual exclusionlockingshared memorymemory barriers, and synchronization, etc. I must say you got to read this book to know its actual value, it is just amazing.

In short, a truly excellent book and a must-read for not just Java programmer but anyone who wants to learn basics of concurrent programming, like C++C#Scala.



2. Java Thread 3rd edition 
The first book I have read, particularly in Java multi-threading was the Java Thread 2nd edition by Scott Oaks and Henry Wong. The book is fantastic, and it teaches the basics of creating a thread and how to use them with some non-trivial yet straightforward example.

They have one of the best chapters on teaching, how to use wait and notify mechanism in Java.  The only drawback of 2nd edition was then it has not covered new concurrency classes like CountDownLatchCyclicBarrier, or Semaphore introduced in Java 1.5.


best book to learn threads in Java


The new, Java Thread 3rd edition fills that gap, and now it covers all those new concurrencies and synchronization utilities of J2SE 5.0.

If you are a beginner and doesn't know much about what is a thread, how do they help and how to use them to create a multi-threaded application, this is the book, you should read. If you want, you can also combine this with Applying Concurrency and Multi-threading to Common Java Patterns course on Pluralsight to learn some real-world stuff as well.

Though this book focuses on Java programming language, it also a useful for learning basics of threading, if you want to start with other JVM language, like Scala.



3. Java Concurrency in Practice 
Many of hardcore fan of Java Concurrency in Practice will be furious by not keeping this book at the top of this list. Well, I have ordered the book from beginner programmers to advanced programmers, and this book certainly covers the advanced aspect of Java concurrency.

By the way, If you ask me to recommend just one book on concurrency and multi-threading to a Java programmer, I would recommend this one.

The Java Concurrency in Practice is the bible of concurrency and concurrent programming for Java developer and a must-read for anyone serious about parallel programming. There are a lot of good things about this book, starting from their icons for showing corrupt practices, and then improving them.

The only thing which concern me is that the concepts itself are not so easy so many a times programmer finds it really difficult to read a book like this. If you also face same problem, I suggest you join the Java Concurrency in Practice Bundle course by Heinz Kabutz, a Java Champion and one of my favorite instructor.

He has created this course so that you can understand the concepts explained in the book more easily. It's an areally good companion of the book and you would probably learn much more and in-depth if you combine the book with this course.

best book to learn concurrency in Java


One of the highlights is their terminology, which is just crystal clear, very important when you are explaining a complex and confusing topic.

Another highlight is their author group, which includes Java concurrency expert Brian Goetz, Joshua Bloch who has written Effective Java and Java Collection API, Doug Lea, author of many classes in java.util. Concurrent package, like the ConcurrentHashMap, one of the most used concurrent collection in Java.

In one word, every Java developer must have a copy of Concurrency Practice in Java in their book self and smartphone for reading whenever they have some time.



4. Concurrent Programming in Java: Design Principles and Patterns 
This book is another gem on concurrency and multi-threading from Doug Lea. This book is also meant for experienced and senior Java programmers, who know the basics of multithreading in Java and bit of concurrency as well.

This book explains lots of design, patterns, and details about inbuilt synchronization features of Java programming language. Many of the patterns and design described in this book is used by Doug Lea while implementing java.util.concurrent package.

This books can be best utilized by following examples and looking at concurrency code written Doug Lea itself.

This book also covers the Java Memory Model, which is very important for any Java programmer. Though I suggest reading the Java Memory Model chapter from Java Concurrency in Practice for any beginners first because of its language, which is slightly easier to understand.

best book to learn concurrent design patterns in Java




5. Programming Concurrency on the JVM
This is a relatively new book in the field of concurrent programming, synchronization and multi-threading. This is written by one of my favorite author, Venkat Subramaniam, this not only explains concepts in Java but also in other JVM programming language, like Scala, Groovy, closure, and JRuby.

The main highlight of this book is Software Transnational Model(STM) and Actor-based concurrency. This book explains new techniques of concurrent programming which allow you to compare and choose leading-edge stuff. This books a lot of new things in a table which is I guess it's the best selling point.

best book to learn concurrency in JVM


These were my top 5 Java Concurrency and multi-threading books, will help to learn concurrent programming and taking advantage of today's advanced multi-core processors. All the books are useful for both beginners and experienced Java programmer to fill gaps on basics and learn tried and tested concurrent design principles, patterns, best practices, and things to avoid. Having said that, let us know if you find any other good books on Concurrency and threading.


Other Programming resources and Books you may like

Thanks for reading this article so far. If you like this article, then please share it with your friends and colleagues. If you have any questions or feedback, then please drop a note.

P.S. - If you are looking for a complete set of Java book to become an expert Java developer, you must see 10 Java books for experienced programmers.

P.S. - If you want to improve your coding skill irrespective of any programming skill then you should check out these 5 timeless classic coding books.

7 comments :

Animesh Kumar said...

Thanks

Ch!rag said...

Great collection, Thank you !!!

Gupta said...

Nice Collection.. Thanks.

Javin Paul said...

@Animesh, @Chirag, and @Gupta, Thank you guys, feel free to suggest any book which you find good in threads, and concurrent programming and not in this list.

Amrish Pandey said...

I am 70% complete with Programming concurrency on JVM. This book is totally worth it. Its meant only for senior java developers, not for basics of multi threading

Javin Paul said...

Thanks @Amrish, for sharing your experience. Programming Concurrency on JVM is definitely a great book to learn advanced concurrency patterns and models e.g STM and Actor based concurrency.

Unknown said...

Thank you a lot, Javin! I appreciate your work :)

Post a Comment