【发布时间】:2015-07-29 16:05:57
【问题描述】:
以下是我的代码。
public class Test {
public static void main(String[] args) throws InterruptedException {
PrintingThread a = new PrintingThread("A");
a.setPriority(9);
PrintingThread b = new PrintingThread("B");
b.setPriority(1);
a.start();
b.start();
}
static class PrintingThread extends Thread {
private int i = 0;
private String name;
public PrintingThread(String name) {
super();
this.name = name;
}
@Override
public void run() {
while (true) {
i++;
if (i % 100000 == 0) {
System.out.println("Thread " + name + " count=" + i
+ ". Time :" + System.currentTimeMillis());
}
}
}
}
}
由于我为 A 设置了更高的优先级,我希望 print 语句会为 A 提供更高的值,但事实并非如此。以下是运行程序一段时间后的示例输出。
Thread A count=1033300000. Time :1431937330486
Thread A count=1033400000. Time :1431937330486
Thread A count=1033500000. Time :1431937330486
Thread A count=1033600000. Time :1431937330486
Thread B count=1058600000. Time :1431937330485
Thread B count=1058700000. Time :1431937330487
我在 Ubuntu 上运行 Java 版本 1.7.0-79-b15。 我使用命令运行程序
taskset 0x00000001 java -jar Untitled.jar
并已使用系统监视器 UI 验证仅使用了一个 CPU(如果我执行命令 java -jar Untitled.jar 使用了两个 CPU)。
这是否意味着即使我设置了优先级也没有区别?还是我的程序有问题?
【问题讨论】:
-
您的答案实际上在于here。我错过了 linux OS 部分。
-
你的程序逻辑永远不应该依赖于线程优先级,它是你无法回复的,并且很可能执行与预期不同。
-
@NitinDandriyal 感谢 Nithin 的指点。我需要知道这一点的原因是为了比较 Java SE 和 RTSJ。
标签: java multithreading concurrency thread-priority