An application typically is implemented as a separate process with several threads of control. Below we highlight a few examples of multithreaded applications: An application that creates photo thumbnails from a collection of images may use a separate thread to generate a thumbnail from each separate image. A web browser might have one thread display images or text while another thread retrieves data from the network. A word processor may have a thread for displaying graphics, another thread for responding to keystrokes from the user, and a third thread for performing spelling and grammar checking in the background.
These three examples are useful because they show three different reasons to thread something: the thumbnail case is about parallelizing identical work across images, the browser case is about keeping the interface responsive while I/O happens, and the word processor case is about running a genuinely background task, spell check, without the user noticing it at all.

