线程的实现:

线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件I/O等),又可以独立调度(线程是CPU调度的基本单位)。

每个以及执行start()且还未结束的java.lang.Thread类的实例就代表了一个线程。


Java线程调度:

协同式线程调度:线程的执行时间由线程本身来控制,线程把自己的工作执行完了以后,要主动通知系统切换到另外一个线程上。

好处:实现简单,而且由于线程要把自己的事情干完后才会进行线程切换,切换操作对线程自己是可知的,所以没有线程同步的问题。

坏处:线程执行时间不可控制,甚至如果一个线程编写有问题,一直不告知系统进行切换,那线程就一直阻塞在那里.

抢占式线程调度:每个线程有系统来分配执行时间,线程的切换不由线程本身决定.在这种实现线程调度的方式下,线程的执行时间是系统可控的,也不会有一个线程导致整个进程阻塞的问题.


状态转换: