Concurrent Programming in Java: Design Principles and Pattern, 2nd Edition