欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

线程优先级不会高于其所在线程组的优先级

程序员文章站 2022-07-10 21:29:57
示例代码:public static void main(String[] args) throws InterruptedException { ThreadGroup threadGroup = new ThreadGroup("线程组一"); //设置线程组优先级 threadGroup.setMaxPriority(6); Thread thread = new Thread(threadGroup, "线程一"); System.out.println("...

示例代码:

public static void main(String[] args) throws InterruptedException {
    ThreadGroup threadGroup = new ThreadGroup("线程组一");
    //设置线程组优先级
    threadGroup.setMaxPriority(6);
    Thread thread = new Thread(threadGroup, "线程一");
    System.out.println("设置前线程优先级---" + thread.getPriority());
    //设置线程优先级
    thread.setPriority(7);
    System.out.println("设置后线程优先级---" + thread.getPriority());
}

运行结果:
线程优先级不会高于其所在线程组的优先级
为什么设置了线程所在的线程组最高优先级为6,但是线程的优先级还是5,接着设置线程的优先级为7,但是线程的优先级却又是6?

先看看为什么线程一开始优先级为5,这里直接打上断点测试:

线程优先级不会高于其所在线程组的优先级
可以得知,在线程新建时,优先级会先取父线程的优先级,所以等于5。

那么接下来又为什么等于6了?看看setPriority()方法源码:
线程优先级不会高于其所在线程组的优先级
这是因为在线程调用setPriority()方法设置优先级时,会先取得其所在的线程组的优先级,然后做个比较,如果要设置的优先级大于线程组的优先级,那么强行把值赋值成线程组的最大优先级,这里为6,同时设置,所以设置完线程优先级后,线程优先级为6。

总结

从以上源码和测试可以看出,线程优先级不会高于其所在线程组的优先级。

本文地址:https://blog.csdn.net/weixin_38106322/article/details/107370609