有没有办法设置SwingWorker使用的后台线程的优先级?

时间:2012-04-16 15:54:13

标签: java multithreading swing swingworker thread-priority

在Java中有没有办法为将调用doInBackground()对象的SwingWorker方法的线程设置优先级?

在Thread API中有一个setPriority()方法。 SwingWorker.execute()方法调度swingworker以在工作线程上执行。我想访问该工作线程以设置它的优先级。

据我所知,这个工作线程来自一个默认的工作线程池。解决这个问题的唯一方法是使用我自己的执行器吗?

3 个答案:

答案 0 :(得分:7)

JDK7 SwingWorker javadoc暗示设计者并不打算让用户直接与后台线程交互或改变后台线程:

... the exact strategy of choosing a thread for any particular SwingWorker is unspecified and should not be relied on.

SwingWorker.getWorkersExecutorService()的实现似乎强化了这个想法,因为他们以一种不易改变的方式实现了它。

SwingWorker是典型案例的样板解决方案,您没有典型案例。我建议你编写代码来处理运行后台任务,而不是试图破解SwingWorker来做你想做的事情。这样,无论是谁将来维护你的代码(甚至可能是你自己!),都不会想到为什么SwingWorker没有按预期运行。

答案 1 :(得分:5)

我能想到的唯一方法是让execute方法使用Thread.currentThread()获取当前线程。然后,您可以设置此线程的优先级(只要允许调用者)。

答案 2 :(得分:2)

由于SwingWorker是Runnable,您可以将其提交给任何java.util.concurrent.ExecutorService