请问java线程优先级的设置为什么没有效果?
源码:publicclassThreadPriorityimplementsRunnable{privatestaticIntegeri=0;publicvoidrun(...
源码:
public class ThreadPriority implements Runnable {
private static Integer i = 0;
public void run() {
for (int n = 0; n < 5; n++) {
i += 1;
}
}
public static void main(String[] args) {
ThreadPriority tp = new ThreadPriority();
Thread td = new Thread(tp);
td.setPriority(Thread.MAX_PRIORITY);
td.start();
System.out.println("i=" + i);
}
}
----------------------------
main线程中创建同优先级的线程td,设置td优先级为Max 10,运行打印static值i应该是5才对,为什么还是输出0?难道main的优先级也是默认10吗?谢谢 展开
public class ThreadPriority implements Runnable {
private static Integer i = 0;
public void run() {
for (int n = 0; n < 5; n++) {
i += 1;
}
}
public static void main(String[] args) {
ThreadPriority tp = new ThreadPriority();
Thread td = new Thread(tp);
td.setPriority(Thread.MAX_PRIORITY);
td.start();
System.out.println("i=" + i);
}
}
----------------------------
main线程中创建同优先级的线程td,设置td优先级为Max 10,运行打印static值i应该是5才对,为什么还是输出0?难道main的优先级也是默认10吗?谢谢 展开
展开全部
所谓线程优先级,个人理解只是对资源竞争的一个辨别依据,就是说当多个线程竞争资源时,具有较高优先级的线程会优先执行。
楼主的线程执行过程太短、逻辑太简单,基本不存在竞争问题,当然看不出优先级的作用……
其实所谓优先级只有在长期稳定运行的系统中才有用,这个很难测试的……
以上回答我觉得挺好,希望对你有帮助。我当初也是测试这样的方法,不过后来也是看了上面的答案,也理解了,确实也是这样的。
楼主的线程执行过程太短、逻辑太简单,基本不存在竞争问题,当然看不出优先级的作用……
其实所谓优先级只有在长期稳定运行的系统中才有用,这个很难测试的……
以上回答我觉得挺好,希望对你有帮助。我当初也是测试这样的方法,不过后来也是看了上面的答案,也理解了,确实也是这样的。
追问
理论上main线程的优先级是Thread.NORM=5,由他创建出来的td优先级也是5,我现在改成Thread.MAX=10,无效,改成Thread.NORM+1,无效。。。偏要调用join()才行............在网上查说windows下java其实没有十个优先级,而且微软明确反对动态调整线程优先级。。。linux下也试过,还是无效,看来只有按照你这样理解呢。
追答
嗯嗯。其实开发一般都不会用到的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询