Thread Concurrency
Each thread is a sequence of steps within a program:
Two or more threads can give the appearance of running at the same time even on a single CPU by sharing the CPU. Each thread gives up execution voluntarily (by executing yield(), etc.) or because its time slice has ended.
Note that the Java system already has concurrently running threads for garbage collection, window management, etc.
Both threads can access variables in memory.
Each thread has its own execution stack and program counter.