Each thread can be scheduled on a different CPU core or use time-slicing on a single hardware processor, or time-slicing on many hardware processors.
Each thread is associated with an instance of the class Thread.