| 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 |