The following information was included in this chapter:
creating threads by extending the Thread class or implementing the Runnable interface
writing synchronized code using synchronized methods and synchronized blocks to achieve mutually exclusive access to shared resources
discussing thread states and the transitions between them, and thread communication