Thinking in Java third edition is the one, for which I have a eBook with me.My primary focus is to take advantage of google frameworks like Android and GWT.
Effective Java is a good book. its written by the guy who designed, implemented, and maintained many of the Java platform libraries.
Java Concurrency in Practice is another good book.
Years ago, when I was interested in making the transition from C++ to Java, I came across a book that was written specifically for that purpose. It was called "The Java/C++ Cross-Reference Handbook". It was written by a guy at HP named Frederick F. Chew. It's an interesting approach, since it was meant to be bi-directional. I.e., it didn't matter which language you were starting from. In fact, you could be a complete newbie and learn either/both.
I just looked it up on Amazon:
ISBN-13: 978-0138483180
Out of a small sample of 6 reviews there, it gets beat up pretty bad (1 five-, 3 two-, and 2 one-*). I was a bit surprised, since I recall it being quite helpful, so I dug through my old books and found that I still had it.
Looking at it again, I can understand the main beef of the reviewers, which seems to be that, if you know either language, there is a lot that is redundant/useless in the book. However, it seems to me that that's in the nature of the approach.
Anyway, it's the only book I know of that provides this sort of bidirectional mapping between the two languages. (Besides, it's available used for under $5!)
Thinking in Java 4th edition has chapters on concurrency and generics that you will want to read. It explains why Java generics are different from C++ templates for instance.
Just want to add that Core Java is also good. It comes in 2 volumes and every chapter has small sections that compare and constrast C++ with Java.
Well written too, imo.