This book shows you how to take advantage of Java's thread facilities:
where to use threads to increase efficiency, how to use them effectively,
and how to avoid common mistakes. It covers the Thread
and
ThreadGroup
classes, the Runnable
interface, and the language's
synchronized
operator, as well as problems like deadlock, race conditions,
and starvation.
This is the best book available on multi-threaded programming, but it's a little tough going in parts.