请问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吗?谢谢
展开
 我来答
mzh_1992
推荐于2018-05-11 · 超过16用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:28.7万
展开全部
所谓线程优先级,个人理解只是对资源竞争的一个辨别依据,就是说当多个线程竞争资源时,具有较高优先级的线程会优先执行。
楼主的线程执行过程太短、逻辑太简单,基本不存在竞争问题,当然看不出优先级的作用……
其实所谓优先级只有在长期稳定运行的系统中才有用,这个很难测试的……

以上回答我觉得挺好,希望对你有帮助。我当初也是测试这样的方法,不过后来也是看了上面的答案,也理解了,确实也是这样的。
追问
理论上main线程的优先级是Thread.NORM=5,由他创建出来的td优先级也是5,我现在改成Thread.MAX=10,无效,改成Thread.NORM+1,无效。。。偏要调用join()才行............在网上查说windows下java其实没有十个优先级,而且微软明确反对动态调整线程优先级。。。linux下也试过,还是无效,看来只有按照你这样理解呢。
追答
嗯嗯。其实开发一般都不会用到的。
似水年华htm
2017-03-18
知道答主
回答量:28
采纳率:0%
帮助的人:6.4万
展开全部
从表面上来分析,我认为在同等条件下,优先级只有在线程足够多的时候才能体现出来,而且起的是一个大致调控结果的作用,就是说,线程优先级越高,最先执行的概率就越大,最后执行完毕的概率就越小,但不保证它不会最后一个执行完毕 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式