乐鱼电竞

  • 教育行业A股IPO第一股(股票代码 003032)

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

    Java线程优先级:Thread类的优先级常量

    更新时间:2021年11月10日13时52分 来源:乐鱼电竞 浏览次数:

    好口碑IT培训

    在应用程序中,如果要对线程进行调度,最直接的方式就是设置线程的优先级。优先级越高的线程获得CPU执行的机会越大,而优先级越低的线程获得CPU执行的机会越小。线程的优先级用1~10的整数来表示,数字越大优先级越高。除了可以直接使用数字表示线程的优先级外,还可以使用Thread类中提供的3个静态常量表示线程的优先级,如下所示。

    Thread类的优先级常量
    Thread类的静态常量 功能描述
    static int MAX_PRIORITY 表示线程的最高优先级,值为10
    static int MIN_PRIORITY 表示线程的最低优先级,值为1
    static int NORM_PRIORITY 表示线程的普通优先级,值为5

    程序在运行期间,处于就绪状态的每个线程都有自己的优先级,例如,main线程具有普通优先级。然而线程优先级不是固定不变的,可以通过Thread类的setPriority(int newPriority)方法进行设置,setPriority()方法中的参数newPriority接收的是1~10的整数或者Thread类的3个静态常量。下面通过一个案例演示不同优先级的两个线程在程序中的运行情况,如下所示。

    // 定义类MaxPriority实现Runnable接口
    class MaxPriority implements Runnable{
        public void run(){
            for (int i=0;i<10;i++){
                System.out.println(Thread.currentThread().getName() +"正在输出:"+i);
            }
        }
    }
    // 定义类MinPriority实现Runnable接口
    class MinPriority implements Runnable {
        public void run(){
            for(int i =0; i<10; i++){
                System.out.println(Thread.currentThread().getName() +"正在输出:"+i);
            }
        }
    }
    public class Example01{
        public static void main (String[] args){
            // 创建两个线程
            Thread minPriority = new Thread (new MinPriority(), "优先级较低的线程");
            Thread maxPriority = new Thread(new MaxPriority(),"优先级较高的线程");
            minPriority.setPriority (Thread.MIN_PRIORITY);      //设置线程的优先级为1
            maxPriority.setPriority (Thread.MAX_PRIORITY);      //设置线程的优先级为10
    
            //开启两个线程
            maxPriority.start();
            minPriority.start();
        }
    }

    下面代码的运行结果如下图所示。

    线程的优先级运行代码

    第2~8行代码定义了MaxPriority类并实现了Runnable接口,第10~16行代码定义实现了Runnable接口的MinPriority类,并在MaxPriority类与MinPriority类中使用for循环打印正在发售的票数,在第22行代码中使用MIN_PRIORITY方法设置minPriority线程的优先级为1,在第23行代码中使用MAX_PRIORITY方法设置manPriority线程优先级为10。

    从运行结果可以看出,优先级较高的maxPriority线程先运行,运行完毕后优先级较低的minPriority线程才开始运行。所以优先级越高的线程获取CPU切换时间片的概率就越大。



    猜你喜欢

    进程和线程的区别和联系是什么?

    Java中的线程池有哪些?

    java线程休眠的sleep方法详细介绍

    乐鱼电竞Java培训高手班课程

    0 分享到:
    和我们在线交谈!


    【网站地图】【sitemap】