Threads

Info from Deital Java How to Program

It is common for desktop computers to do multiple tasks at once, such as receive email, send a document to a printer and edit a file.  Historically, concurrency (performing multiple tasks simultaneously) has required use of operating system primitives. 

Java  makes concurrency primitives available to application programmers. 
In Java, threads move through a variety of thread states:
Thread Priorities and Thread Scheduling
Thread Synchronization
Producer/Consumer with and without synchronization

Producer/Consumer with synchronization

Runnable