This document discusses threads and multithreading. It begins with an introduction to threads and their models, including user-level and kernel-level threads. It then covers multithreading approaches like thread-level parallelism and data-level parallelism. The document discusses context switching on single-core versus multicore systems. It also provides an example of implementing matrix multiplication using threads. Finally, it summarizes a case study on using threads in interactive systems.