A thread is a strand of execution within a process, a process may have many threads executing ‘at the same time’.

For multi-threaded processes, the process has unique values for the registers, stack, and program counter for each thread. Processes are largely independent of each other and do not share memory, however threads share the address space of the process. They have access to the same heap.