如何管理默认的Java SwingWorker线程池?

时间:2010-05-03 17:43:38

标签: java threadpool swingworker

我有一个使用2个长期运行的SwingWorker任务的应用程序,我刚刚遇到了几台带有更新JVM的Windows计算机,这些计算机只能启动其中一个。没有指出错误所以我必须假设默认线程池只有一个线程,因此当我尝试执行它时,第二个SwingWorker对象就会排队。

那么,(1)如何检查默认SwingWorker线程池中有多少线程可用,以及(2)如果我需要更多线程,我该如何添加线程?

还有什么我应该知道的吗?这种明显的单线程线程池情况违背了我的所有期望。

我正在设置一个ThreadPoolExecutor,但这似乎错了......

3 个答案:

答案 0 :(得分:2)

可能有点迟了但是,新版Java中存在一个错误: SwingWorker deadlocks due one thread in the swingworker-pool

答案 1 :(得分:1)

默认的SwingWorker线程池实际上有10个线程(在私有变量SwingWorker.MAX_WORKER_THREADS中定义)。如果你只是看到你的一个任务开始,我会用JConsole或其他类似工具检查另一个线程的状态。

没有简单的方法来处理默认的SwingWorker线程池(它是私有的,不会被任何公共方法暴露)。如果默认池不起作用,则将SwingWorkers添加到您自己的线程池是处理它的预期方法。

答案 2 :(得分:0)

在JDK 6下,默认的工作线程数为10.

您通常不需要创建ThreadPoolExecutor,swing worker使用的默认线程池通常就足够了。创建一个ThreadPoolExecutor可能很糟糕,因为一些静态方法只创建一个带有单个线程的池。

您可能希望向这些线程添加日志记录(如果尚未存在),并检查日志。可能是某些其他同步问题正在停止您的第二个后台任务。