Have you downloaded a large file using a download-accelerator type of application? Have you played an online game? A flight simulator program? Used word processing, web browsers, Java apps, and so on? (The temptation to put in a smiley emoji here is high!)
It's quite likely that you have used at least some of these; so what? All of these disparate applications have something in common: it's highly likely that they are all designed for multithreading, meaning that their implementation uses multiple threads that run in parallel with each other. Multithreading has indeed become almost a way of life for the modern programmer.
Explaining a topic as large as multithreading is itself a big task; hence we are dividing the coverage into three separate chapters. This one is the first of them.
This chapter is itself logically divided...