在调度线程执行时,是否有关于JVM有多公平的假设?
对于下面的代码段,是否可以只执行“代码A”,而忽略B?
public static void main(String args[]) {
new Thread() {
public void run() {
for (;;) { /* code A */ }
}
}.start();
new Thread() {
public void run() {
for (;;) { /* code B */ }
}
}.start();
}
问题更多是理论上的问题-让我们假设没有任何一个线程被阻塞或以其他方式鼓励调度程序切换上下文。
在调度线程执行时,是否有关于JVM有多公平的假设?
不。
对于下面的代码段,是否可以只执行“代码A”,而忽略B?
理论上是。
在实践中:
如果有一个(可用的)内核,我希望操作系统级别的线程调度程序对线程进行时间切片,以使它们在对数条件下各自获得大约50%的可用时间
如果有多个(可用)内核,我希望两个线程可以并行运行。
请注意,JLS或JVM规范均未提及有关线程调度或公平性的任何内容。的javadoc也没有Thread
。
据我所知,唯一提及公平性的Java API是ReentrantLock
API(javadoc),其中有一个用于使用公平性策略创建锁的构造函数参数。这意味着调度程序偏向于一直等待锁定时间最长的线程。但是,即使这是被警告的:
“但是请注意,锁的公平性不能保证线程调度的公平性。”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句