java ExecutorService和SwingWorker
我已经到处寻找这个答案,但似乎找不到,所以如果这是一个愚蠢的问题,我深表歉意。请温柔一点
我正在写一个简单的MVC框架,对SwingWorker
以及它如何与ExecutorService
一起工作感到困惑
我想通过使用Executors.newFixedThreadPool(n)
来限制ExecutorService允许的线程数
我理解使用SwingWorker的重要性,因为它有执行长任务的方法(doInBackground
…等),并允许通过事件调度线程更改GUI
然而,一些{cd8}线程的{cd8}限制了}
我想知道的是,我试图将这两个类结合起来以限制线程的数量,这是错误的,因为这似乎意味着,如果我将一个SwingWorker
任务提交给一个Executor
,那么一个任务最多会产生十个线程吗
我最终的目标是编写一个需要大量计算的程序,我不想从一开始就犯这样一个根本性的错误,因为这可能会被证明是一个资源消耗问题,也就是说,通过正确使用EDT,我将拥有一个可爱的响应GUI,但是,如果每个任务产生多达10个线程,那么它将变得没有响应
# 1 楼答案
SwingWorker
如何与ExecutorService
一起工作ExecutorService
实例,该实例被使用 执行通过SwingWorker
机制提交的任务李>ExecutorService
的实例化是隐藏的,因为它是SwingWorker
实现的一部分,您可能无法编辑它李>SwingWorker
实现了Runnable
,您可以将其提交到自己的ExecutorService
实例李>execute()
方法,那么它将被调度到它自己的ExecutorService
。相反,您可以手动将SwingWorker
实例提交到您自己的ExecutorService
李>如果我向一个执行者提交一个
SwingWorker
任务,那么一个任务最多会产生十个线程吗ExecutorService
文档一个任务只使用一个线程(除非 特别是编程多线程任务)李>ExecutorService
保持空闲状态。这几乎不消耗CPU时间李>ExecutorService
本身在队列中调度李>希望这能消除疑虑。通常,使用默认实现是一个好主意(它工作得很好),但如果需要,可以轻松地限制线程数。此外,它也不会取代Swing的
ExecutorService
。因为它已经存在,所以最好使用它,而不是创建另一个祝你好运