java多线程基础(1)-由调度方式引入线程各种运行状态

线程的调度方式

所有java虚拟机都有一个线程调度器,用来确定哪个时刻运行哪个线程。

  它主要包含2种调度器:抢占式(preemptive)和协作式(cooperative).

          (1)抢占式(重点):

  抢占式调度器确定一个线程正常轮到这个线程的cpu时间用完时,会暂停这个线程,将cpu控制权交给轮到时间的另外一个线程。目前大多数虚拟机都使   用这种方式的线程调度器。

          (2)协作式:

 协作式线程调度器在将cpu控制权交给其他线程钱,会等待正在运行的线程自己去暂停,然后才可以交给另外一个线程。一些早期或者特殊用途的虚拟机   可能会使用这种方式。

           两者区别:

与使用抢占式线程调度的虚拟机相比,使用协作式线程调度器的虚拟机更容易使线程陷入“”饥饿“”,因为一个该优先级的非协作线程会独占整个    CPU。

           结论:所有java虚拟机都确保在不同的优先级之间使用抢占式线程调度,也就是说,当一个优先级低的线程正在裕兴,而一个高优先级线程准备运行时,虚拟             机或早或晚暂停这个优先级低的线程,让高优先级来运行。这样高优先级线程就抢占了低优先级线程。

           

为了能让其他线程有运行的机会,一个线程有10中方式可以暂停或者指示它准备暂停而让其他线程运行,包括(下面会重点介绍其中的集中):

(1)可以对IO阻塞 (2)可以对同步对象阻塞  (3)可以放弃执行当前线程 (4)可以休眠当前线程 (5)可以连接另外一个线程 (6) 可以等待另外一个线程(7)可以结束当前线程 (8)可以被更高优先级线程抢占 (9)可以被挂起 (10)可以停止当前线程.

接下来会详细介绍他们

你可能感兴趣的:(多线程)