Java Swingworker和多线程
|
我正在设计一个 Java GUI驱动的应用程序,该应用程序运行许多单独的任务,每个任务都在自己的SwingWorker扩展类中.这是我使用的正常设计,以便在自己的线程上运行任务,并且仍然可以让EDT免费更新GUI.每个SwingWorker都使用Executors.newCachedThreadPool在自己的线程上启动. 但是,在一个特定的类中,有一个任务需要相当长的时间来处理.该任务包含一个for循环,最多可执行六次计算. 我已经考虑过在自己的线程中实现六个计算中的每一个以加快处理时间,但我不确定实现它的最佳方法. 是否可以扩展SwingWorker并实现Runnable,然后在for循环中使用void Run()方法,每次启动一个新的Thread,或者使用cachedThreadPool. 或者我最好只使用标准的Thread()实现? 任何建议或意见将不胜感激. 提前致谢 玩笑 解决方法user988052当然是正确的 – 如果你没有多核CPU,那么在六个不同的线程中进行计算实际上会减慢你的应用程序,因为线程的创建和管理带来了开销.如果你想在六个独立的线程中进行这种计算,你可以使用SwingWorker作为管理线程,并在其中产生5-6个新线程.然后使用ExecutorService就可以了,因为它使用了一个线程池,从而最大限度地减少了创建和处理线程所带来的开销. 编辑:回答你的评论: 我认为最好的方法是在Runnable中实现计算(以便六个计算中的每一个可以单独运行),然后只需使用ExecutorService,实例化Runnablesix次并使用ExecutorService.submit(Runnable任务).您可以在SwingWorker.doInBackground()方法中完成所有这些操作. 你永远不应该自己调用run()方法 – 让它由Thread / ExecutorService完成. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 为什么Netbeans以它的方式生成hashCode()?
- 详解JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片
- JDBC通用查询经典实例
- java – 通过罗马的feed条目循环
- 多线程 – MS Access中的VBA线程
- java – 为什么索引是包容性的,但是索引是独占的?
- java – JodaTime字符串yyyy-mm-ddThh:mmss.Z到DateTime
- java – Ambiguous Mockito – 0匹配预期,1记录(InvalidUse
- java-ee – HornetQ:如何重用XAConnection和XASession
- java组件SmartUpload和FileUpload实现文件上传功能
