A thread pool pattern can be simply described as a collection of threads. Some of them may be doing useful work, while others are sitting idle, waiting for you to run any job in them.
To the careful reader of this book, the thread pool pattern would seem like an old acquaintance. After all, it is nothing more than a variation on a object pool pattern, which was discussed in Chapter 2, Singleton, Dependency Injection, Lazy Initialization, and Object Pool.
A thread pool is like a taxi service. When you need to travel somewhere, you call the dispatch and as soon as they have a taxi ready, they will send it to pick you up.
Using a thread pool minimizes the time a background task needs to start up. Creating a thread can take some time (up to ten milliseconds and more on older hardware), which can be a problem in highly optimized, heavily multi-threaded programs, for example...