Java多线程和SWING
我正在开发一个基于SWING的多线程Java应用程序
其想法是创建一组后台“任务/服务”,以重复执行某些任务
我的问题是如何实现多线程(在应用程序的较低级别),在某些情况下通过显示SWING组件与GUI交互
我知道我可以使用SwingWorker,但使用它,我将使我的应用程序更加“面向gui”,我不想这样做,但另一方面,我也不想让我的多线程类依赖于gui类
在哪里有什么选择
提前谢谢你
编辑
我忘了提到,这个后台任务需要在一开始就启动,不能由GUI启动(比如引导过程)
# 1 楼答案
使用观察者/监听器模式怎么样?由
SwingWorker
启动的后台任务可以在需要时通知其他一些组件@Xeon comment为您指明了一个好的方向个人建议:从一些解决方案开始,然后在代码变得不那么可读时继续重构
顺便说一句,我希望你还记得老规矩:
Swing components should be accessed on the Event Dispatch Thread only
;)# 2 楼答案
您需要了解并发设计模式,例如参与者、未来、线程池等。事件驱动意味着你没有阻塞代码,例如,我不是在等你,不停地问你是否完成了任务,而是在你准备好后告诉我
如果您选择actor路线,您可以将gui类包装在一个控制器中,该控制器是一个一次处理一条消息的actor。你需要小心swing,不要创建事件循环,比如事件A触发事件B,再次触发事件A等等
这就是为什么观察者模式可以很好地显示数据
但是,对于并发性来说,并没有什么灵丹妙药。不幸的是,演员模型和未来都在进步(看看akka),但这基本上是一项艰巨的任务,所以总是很难做到正确
基本上,我想说,最简单的方法是对您愿意适应的并发类型制定非常严格的规则,您需要考虑添加每一点并行功能的后果,以及它有什么影响。然后使用一个完善的并发模型基于此设计代码