A thread is the smallest entity of execution within a program.
Within a process, there may be one or more threads, each with the following:
- A thread execution state (Running, Ready, etc.)
- A saved thread context when not running; one way to view a thread is as an independent program counter operating within a process
- An execution stack
- Some per-thread static storage for local variables
- Access to the memory and resources of its process, shared with all other threads in that process
Source: William Stallings, Operating Systems: INTERNALS AND DESIGN PRINCIPLES