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

Cli*_*ton 5 java swing multithreading swingworker thread-priority

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

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

根据我的理解,这个工作线程来自一个默认的工作线程池.解决这个问题的唯一方法是使用我自己的执行者吗?

Jas*_*cht 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没有按预期运行.


Jim*_*Jim 5

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

  • 我认为这种方法可行.`Thread.currentThread()`应该在"doInBackground()"方法(工作线程)中执行. (2认同)