当前位置: 移动技术网 > IT编程>开发语言>Java > 线程优先级不会高于其所在线程组的优先级

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

2020年07月16日  | 移动技术网IT编程  | 我要评论

示例代码:

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网