在Java中有没有办法为将调用doInBackground()
对象的SwingWorker
方法的线程设置优先级?
在Thread API中有一个setPriority()
方法。 SwingWorker.execute()
方法调度swingworker以在工作线程上执行。我想访问该工作线程以设置它的优先级。
据我所知,这个工作线程来自一个默认的工作线程池。解决这个问题的唯一方法是使用我自己的执行器吗?
答案 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