如果我想在Linux下使用线程制作Java应用程序,并设置优先级,最小值和最大值是多少?
在Windows中,范围从0(最低)到31(最高)。
如果我想在Linux下使用线程制作Java应用程序,并设置优先级,最小值和最大值是多少?
在Windows中,范围从0(最低)到31(最高)。
MIN_PRIORITY
和MAX_PRIORITY
已经有定义的值,分别为1和10。实现上需要注意的是这些级别与实际操作系统优先级级别之间的映射关系是由具体实现决定的! - Joachim SauerThread
类有两个静态的int
字段,分别为MIN_PRIORITY
和MAX_PRIORITY
,它们的实际值为可能(如果不是)与平台相关1
和10
。理论上这些值在未来的Java版本中可能会发生变化,但这种情况极为罕见,因为这样的改变会破坏二进制兼容性。(原始常量的值可能会在编译时绑定到使用它的代码上)。无论如何,在(例如)setPriority
方法的规范中都隐含着MIN_PRIORITY
的值小于或等于MAX_PRIORITY
的值。
编辑
啊...所以你真的想知道Java优先级值(例如Thread.MIN_PRIORITY
和Thread.MAX_PRIORITY
)如何映射到Linux本地线程优先级:
优先级映射可能是特定于平台/JVM/版本的。Sun没有指定它们是什么。
在纯Java应用程序中,您极有可能无法确定优先级映射。
通过设置各种Java线程优先级并查看相应的Linux本机线程优先级,您可能会实验性地弄清楚映射关系。(可能有一些方法可以让 ps
命令打印出线程优先级。)
或者,您可以下载并阅读OpenJDK源代码(针对您的版本/平台),以查看Java运行时实际执行的操作。
编辑2
实际上,根据this page,Java优先级到本机线程优先级的映射取决于(并且可以使用HotSpot -XX java选项进行显式设置)。(在页面中搜索"priority"。)
你尝试过使用常量Thread.MIN_PRIORITY和Thread.MAX_PRIORITY来定义线程的优先级吗?
优先级范围为-20(最高)到+20(最低),默认值为0。 如果您不是root用户,则不能将nice值增加负值。 例如,将5的nice值增加-7将被忽略,因为通常您没有权限执行此操作。
编辑请参见https://stackoverflow.com/questions/128039/java-threads-priority-in-linux