by Scott Oaks and Henry Wong
 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. 
   by This is the best book available on multi-threaded programming, but it's a little tough going in parts.