There are several very important books:
1. Effective Java - Joshua Bloch. This is by far the most important one.
2. Java, Concurrency in practice - Goetz
3. The art of multiprocessor programming - Herlihy and Shavit. This is much more theory oriented, but essential to become an excellent multithreaded programmer.
4. Java Puzzlers - Joshua Bloch and Neal Gafter. This is quite a fun book - lots of Java Conundrums