全国咨询/投诉热线:400-618-4000

Java基础教程:多线程(5)-----线程的调度之优先级

更新时间:2017年11月14日16时07分 来源:传智播客 浏览次数:

程序中的多线程是并发执行的,但这只是宏观现象。对于大多数计算机而言,CPU只有一个,在某个特定的时刻只能执行一条机器指令,多线程的每个线程只有得到CPU的使用权才能执行指令。Java虚拟机按照特定机制为多个线程分配CPU的使用权就是线程的调度。

在计算机中,CPU的调度有两种调度模型,分别是分时调度模型和抢占式调度模型。所谓分时调度模型是指让所有的线程轮流获得CPU的使用权,并且平均分配每个线程占用的CPU的时间片。而抢占式调度模型是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。Java虚拟机采用的就是抢占式调度模型,这种默认的方式在很多时候都是适用的,程序员不需要去关心它,但有时候需要改变这种分配的模式,这时则需要控制CPU的调度。JDK中提供了一系列的方法用于控制线程的调度。

线程的优先级

在线程中有优先级的机制,线程的优先级用1~10之间的整数来表示,数字越大则表示优先级越高。除了数字,还可以使用Thread类中提供的三个静态常量表示线程的优先级,他们分别是:MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORIY。

优先级高的线程获得CPU执行的机会越大,而优先级低的线程获得CPU执行的机会越小。在默认情况下,每个线程都有自己的优先级,例如main线程具有普通优先级。线程优先级不是固定不变的,通过调用Thread类的setPriority(int newPriority)方法可以进行改变,setPriority()方法的数newPriority接收1~10之间的数或者Thread类的三个静态常量,代码如下所示:

class MaxPriority implements Runnable {

publicvoid run() {

for(int i = 0; i < 3; i++) {

System.out.println(Thread.currentThread().getName()

+":优先级为高,循环变量为" + i);

}

}

}

class MinPriority implements Runnable {

publicvoid run() {

for(int i = 0; i < 3; i++) {

System.out.println(Thread.currentThread().getName()

+":优先级为低,循环变量为" + i);

}

}

}

public class Example06 {

publicstatic void main(String[] args) {

ThreadminPriority = new Thread(new MinPriority());

ThreadmaxPriority = new Thread(new MaxPriority());

minPriority.setPriority(Thread.MIN_PRIORITY);

maxPriority.setPriority(10);

minPriority.start();

maxPriority.start();

}

}

运行结果为:

Thread-1:优先级为高,循环变量为0

Thread-1:优先级为高,循环变量为1

Thread-1:优先级为高,循环变量为2

Thread-0:优先级为低,循环变量为0

Thread-0:优先级为低,循环变量为1

Thread-0:优先级为低,循环变量为2

在程序中创建了两个线程minPriority和maxPriority,分别将线程的优先级设置为1和10,从运行结果可以看出优先级高的maxPriority线程先运行完毕后优先级低的minPriority线程才开始运行。

虽然Java中提供了10个线程优先级,但这些优先级需要操作系统的支持,然而,不同的操作系统支持的优先级并不相同,不能很好的和Java中线程优先级一一对应,因此,在设计多线程应用程序时,其功能的实现一定不能依赖于线程的优先级,而只能把线程优先级作为一种提高程序效率的手段。友情提示:获得更多学科学习视频+资料+源码,请加QQ:3276250747。

作者:传智播客java学院

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额