Java Swingworker和多线程

Jos*_*ven 7 java swing multithreading swingworker

我正在设计一个Java GUI驱动的应用程序,该应用程序运行许多单独的任务,每个任务都在自己的SwingWorker扩展类中.这是我使用的正常设计,以便在自己的线程上运行任务,并且仍然可以让EDT免费更新GUI.每个SwingWorker都使用Executors.newCachedThreadPool在自己的线程上启动.

但是,在一个特定的类中,有一个任务需要相当长的时间来处理.该任务包含一个for循环,最多可执行六次计算.

我已经考虑过在自己的线程中实现六个计算中的每一个以加快处理时间,但我不确定实现它的最佳方法.

是否可以扩展SwingWorker并实现Runnable,然后在for循环中使用void Run()方法,每次启动一个新的Thread,或者使用cachedThreadPool.

或者我最好只使用标准的Thread()实现?

任何建议或意见将不胜感激.

提前致谢

玩笑

mor*_*ort 5

user988052当然是正确的 - 如果你没有多核CPU,在六个不同的线程中进行计算实际上会减慢你的应用程序,因为线程的创建和管理带来了开销.

如果你想在六个独立的线程中进行这种计算,你可以使用SwingWorker作为管理线程,并在其中产生5-6个新线程.ExecutorService然后使用将成为可行的方法,因为它使用了一个线程池,从而最大限度地减少了创建和处理线程所带来的开销.

编辑:回答你的评论:

我认为最好的方法是在a中实现你的计算Runnable(这样六个计算中的每一个都可以单独运行),然后简单地使用一个ExecutorService,实例化你的Runnable六次并使用ExecutorService.submit(Runnable task).您可以在SwingWorker.doInBackground()方法中完成所有这些操作.

你永远不应该run()自己调用这个方法 - 让它由Thread/ExecutorService完成.