Write code to define, instantiate and start new threads using both java.lang.Thread and java.lang.Runnable.
Recognize conditions that might prevent a thread from executing.
Write code using synchronized wait, notify and notifyAll to protect against concurrent access problems and to communicate between threads.
Define the interaction among threads and object locks when executing synchronized wait, notify or notifyAll.
Both java.lang.Thread and java.lang.Runnable can be used to create new threads. A thread can exist in one of several states. Various method calls and events may cause a thread to go from one state to another. Several conditions may prevent a thread from executing.
Most questions related to thread control concern using and implementing threads (through the Thread class or Runnable interface) and the use of the notify() and wait() methods. A good understanding of object locks and synchronized code is required. Note the difference between the notify() and notifyAll() methods.