As discussed in Chapter 16, a number of different multiprocessor hardware platforms are in widespread production use today. Traditional software design, however, is based on processes containing a single set of instructions designed to execute in a serial order. Such so-called single-threaded software cannot take advantage of more than one CPU at a time to increase execution speed and performance. By contrast, multithreaded code is designed to contain multiple sequences of instructions that can execute in parallel. Besides using multiprocessors more efficiently to increase application performance, multithreading can also lead to improved program structure when correctly implemented. For example, system-oriented tasks like event handling, garbage collection, rendering, and animation updates can be cleanly factored into separate threads, away from your core application logic. This chapter introduces you to multithreading concepts and discusses how to design and debug multithreaded programs. The chapter finishes by providing a set of guidelines for multithreaded programming.