【问题标题】:Higher priority thread getting the same CPU amount as the lower priority?较高优先级的线程获得与较低优先级相同的 CPU 数量?
【发布时间】: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


【解决方案1】:

你的程序很好。

设置线程的优先级只是对底层操作系统(来自您的代码)的一个提示,要求它尝试增加线程的优先级时间>。无法保证(甚至没有必要)操作系统会根据您的调用执行某些操作。

如果此程序在不同的环境(CPU 负载)或不同的平台下运行(但预期的结果可能不一致,您可能会看到差异 em>)。

注意:在 Linux 系统上,默认情况下不考虑线程优先级。您必须使用XX:ThreadPriorityPolicy 选项在Linux 上启用线程优先级

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 2014-11-26
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多