This is by far the best source for explaining the ideas and algorithms underlying java.util.concurrent — the vast majority of them, plus some others, including a few that may someday appear. It also uses Java/java.util.concurrent to illustrate most concepts. I strongly recommended it.
While it's a bit pricey, as a heavy user of the
java.util.concurrent package I'm interested in reading it. We've greatly increased the stability and performance of our code by using both the 1.5+ and backport versions and understanding the underlying concepts a bit better might yield even better improvements.
I remember at my first job out of school, programming in Objective-C on NEXTSTEP, I wanted to use threads and I was told no by our tech lead who said we'd eventually screw it up — he was probably right — and generations of Java developers have been screwing it up ever since. Most were led to believe threads in Java were easy if
synchronized markers [were] employed like pixie dust until the problem seems to go away.
It's too bad it's taken so long for the higher level abstractions to materialize in Java because so much old code now needs replacing (not to mention countless hours debugging wasted) but it's worth it. In one recent example I removed 6
synchronized statements by replacing them with a
java.util.concurrent.BlockingQueue and Erlang-style message passing.