Table of Contents
- The first step: Concurrency design principles
- Managing lots of threads: Executors
- Getting the maximum from Executors
- Getting data from the tasks: The Callable and Future interfaces
- Running tasks divided into phases: The Phaser class
- Optimizing Divide and Conquer solutions: The Fork / Join
- Processing massive data sets with parallel Streams: The Map and Reduce model
- Processing massive data sets with parallel Streams: The Map and Collect model
- Diving into Concurrent Data Structures and Synchronization utilities
- Integration of Fragments and Implementation of Alternatives
- Testing and Monitoring concurrent applications

