每次运行程序时,执行顺序因最大优先级分配而发生变化o线程b应首先启动并首先完成输出不相应
threadA.setPriority(Thread.MIN_PRIORITY);
threadB.setPriority(Thread.MAX_PRIORITY)
System.out.println("Start Thread A");
threadA.start();
System.out.println("Start Thread B");
threadB.start();
System.out.println("End of main Thread");
答案 0 :(得分:3)
我想引用xagyg的回答:
让我们保持简单,直接找到源......
每个帖子都有优先权。有竞争加工时 资源,具有较高优先级的线程通常在执行 对优先级较低的线程的偏好。这种偏好不是, 但是,保证最高优先级的线程永远是 运行,并且线程优先级不能用于可靠地实现 相互排斥。
来自Java语言规范(第2版)第445页。还......
虽然Java中存在线程优先级,但许多引用都是状态 JVM将始终选择一个最高优先级的线程 对于调度[52,56,89],目前不能保证 Java语言或虚拟机规范[53,90]。优先级 仅提示调度程序[127,第227页]。
来自Testing Concurrent Java Components(PhD Thesis,2005)p。 62。
参考127,第227页(摘自上面的摘录)来自Component 软件:超越面向对象的编程(由C. Szyperski提供), Addison Wesley,1998年。
简而言之,不要依赖线程优先级。
答案 1 :(得分:1)
线程优先级是操作系统的提示,只有在使用非常高的情况下才有意义。所有CPU上100%的CPU利用率。一个线程可以在另一个线程启动时运行完成。
BTW:您必须是Windows上的管理员和root
或Linux上具有setcap
权限才能提高优先级。
简而言之,改变优先级是无用的,不能依赖。
答案 2 :(得分:0)
如果你的计算机有两个或多个核心运行两个线程(每个都分配给它自己的核心) - 这是通常的情况 - 那么线程优先级现在可能已经生效。每个线程都将以最大单核速度运行。
另外:首先从主线程启动线程A.然后你启动线程B.主线程有多快?线程A是否比启动线程更快 - 线程B?
如果您想确保执行顺序,则必须使用join,而不是优先级。