【发布时间】:2014-03-02 21:07:44
【问题描述】:
我已经到处寻找这个答案,但似乎找不到它,如果这是一个愚蠢的问题,请道歉。请温柔一点。
我正在编写一个简单的 MVC 框架,我对 SwingWorker 以及它如何与 ExecutorService 一起工作感到困惑。
我想限制 ExecutorService 允许我使用Executors.newFixedThreadPool(n) 的线程数。
我了解使用 SwingWorker 的重要性,因为它具有执行冗长任务的方法 (doInBackground...等) 并允许通过事件调度线程更改 GUI。
但是,创建Executors.newFixedThreadPool(n) 将线程数限制为n,而SwingWorker 似乎通过某种私有内部常量MAX_WORKER_THREADS 设置了10 个线程的限制。
我想知道的是,我是在尝试将这两个类组合起来以限制线程数的错误树,因为这意味着如果我将SwingWorker 任务提交给Executor,会这样吗?一个任务最多产生十个线程?
我的最终目标是编写一个会进行一些密集计算的程序,并且我不想从一开始就犯这样的基本错误,因为这可能会被证明是资源消耗问题,也就是说,我将通过正确使用 EDT 得到一个可爱的响应式 GUI,但是如果每个任务都产生多达 10 个自己的线程,它将变得无响应!
【问题讨论】:
-
Executor 和 SwingWorker 存在一个错误,有时取决于 Java 版本(1.6_015、1.6_022),但只有当您超载最大线程数 (12) 时才能捕获此问题,然后SwingWorker 未结束(在 done() 中),默认是 non_sence 来限制线程数,因为没有任何保证在预期时间内全部在 done() 结束
-
我对@987654321@或here的看法
标签: java swing model-view-controller swingworker executors