在前面的小节介绍过,程序中的多个线程是并发执行的,某个线程若想被执行必须要得到 CPU 的使用权。
Java 虚拟机会按照特定的机制为程序中的每个线程分配 CPU 的使用权,这种机制被称作线程的调度。
在计算机中,线程调度有两种模型,分别是分时调度模型和抢占式调度模型。
分时调度模型是指让所有的线程轮流获得 CPU 的使用权,并且平均分配每个线程占用的 CPU 的时间片。“高优先级线程”被分配CPU的概率高于“低优先级线程”。根据时间片轮循调度,所以能够并发执行。无论是是级别相同还是不同,线程调用都不会绝对按照优先级执行,每次执行结果都不一样,调度算法无规律可循,所以线程之间不能有先后依赖关系。
抢占式调度模型是指让可运行池中优先级高的线程优先占用 CPU,而对于优先级相同的线程,随机选择一个线程使其占用 CPU,当它失去了 CPU 的使用权后,再随机选择其他线程获取 CPU 使用权。
Java 虚拟机默认采用抢占式调度模型,通常情况下程序员不需要去关心它,但在某些特定的需求下需要改变这种模式,由程序员自己控制 CPU 的调度。