线程优先级不会高于其所在线程组的优先级
程序员文章站
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