A good book on writing multi-threaded applications is "Concurrent Programming in Java" by Doug Lea. The focus is more on multi-threaded applications than on Java.