1

我有这样的代码:

Thread thread = new Thread(new Runnable()
    {
        @Override
        public void run()
        {
            //extremely time-consuming actions
        }
    });
thread.setPriority(Thread.MAX_PRIORITY);
thread.start();

该线程将执行一些耗时的操作,并且它也具有高优先级。

现在我想知道这个线程在我系统的所有其他程序中是否具有更高的优先级,或者与同一程序的线程相比它具有更高的优先级?

4

3 回答 3

2

优先级在进程中的线程内而不是跨进程。JVM 甚至可能选择忽略优先级,因此您甚至无法保证进程本身的优先级。

JVM 为 Java 线程定义了十个逻辑优先级范围,包括:

java.lang.Thread.MIN_PRIORITY = 1

java.lang.Thread.NORM_PRIORITY = 5

java.lang.Thread.MAX_PRIORITY = 10

这些值 [1..10] 被传递到 Thread.setPriority(int) 以将优先级分配给 Java 线程。Java 线程的默认优先级是 NORM_PRIORITY。(没有显式调用 setPriority 的 Java 线程在 NORM_PRIORITY 运行。)JVM 可以自由地以它选择的任何方式实现优先级,包括忽略 value

于 2013-04-10T05:49:09.760 回答
1

只有同一个程序 - 在虚拟机本身。但这也不是保证,只是对 VM 的提示。

于 2013-04-10T05:47:43.920 回答
0

很难一概而论,因为它取决于底层平台。Java 线程优先级被映射到操作系统线程优先级,通常没有一对一的映射。一些平台提供从 1 到 10 的优先级。但 Java 只提供 3 个级别。

因此,操作系统有责任平等和公平地对待来自应用程序的所有具有相同优先级的线程以及它自己的线程。

于 2013-04-10T05:48:55.027 回答