C/C++ 狂野架构师 -->
  • 精品课程
  • 免费教程
  • 教研团队
  • 开班时间
  • 报考大学
  • 学员社区
  • AI智能应用开发 AI大模型开发(Python) AI鸿蒙开发 AI嵌入式+机器人开发 AI运维 AI测试 跨境电商运营 AI设计 AI视频创作与直播运营 微短剧拍摄剪辑 C/C++ 狂野架构师

    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学院所有,欢迎转载,转载请注明作者出处。谢谢!


    相关教程
    java多线程一:多线程概念
    java多线程二:创建线程的第一种方式
    java多线程三:创建线程的第二种方式
    java多线程四:线程的生命周期
    java多线程五:线程的调度之优先级
    作者:乐鱼播客java学院
    首发:http://java.itcast.cn/
    0 分享到:
    在线咨询 我要报名
    和我们在线交谈!
    【网站地图】【sitemap】