【发布时间】:2012-04-27 23:33:47
【问题描述】:
在 Java 中,有没有办法为将调用 doInBackground() 对象的 doInBackground() 方法的线程设置优先级?
在 Thread API 中有一个 setPriority() 方法。 SwingWorker.execute() 方法安排 swingworker 在工作线程上执行。我想访问那个工作线程来设置它的优先级。
据我了解,此工作线程来自默认工作线程池。解决这个问题的唯一方法是使用我自己的执行器吗?
【问题讨论】:
-
除非您使用接近 100% 的所有 CPU,否则设置优先级可能没有任何区别。如果您正在使用所有 CPU,则优先级只是 JVM 或 OS 可以随意忽略的提示。恕我直言,它不会解决您的问题。
-
该应用程序专门针对 Windows,JVM 是标准的 Oracle JVM。从这个其他堆栈溢出问题来看,它确实在这种情况下有所不同:stackoverflow.com/questions/297804/…
-
它对提供给操作系统的提示有所不同。当您不使用所有 cpu 时,它是否有任何区别,这是我的问题。 AFAIK,如果你有空闲的 cpu,每个可以运行的线程都将运行,无论优先级如何。仅当操作系统必须做出优先级重要的选择时才重要。
-
@Peter,Windows 使用进程基优先级和线程优先级来考虑一些整体优先级。附带说明:增加 prir 会使线程干扰 GC 线程,并且您总是希望 GC 线程首先运行。
标签: java multithreading swing swingworker thread-priority