我正在使用swing并且在我的应用程序中我需要并行运行多个线程,例如每隔5秒检查一次互联网连接,监视文件系统更改,从服务器监视 sycing 文件。
上述所有耗时的任务都在 SwingWorker
中运行,因此我的GUI不应该冻结。
同时我需要运行一些其他耗时的任务,例如将文件上传到服务器。为此,我也使用了swingWorker。然后我将所有这些swingworker提交给executterService进行线程池化,这样它们就不会相互影响。
我的执行者服务是这样的。我认为30个线程对我来说已经足够了。
static ExecutorService threadExecutor;
threadExecutor = Executors.newFixedThreadPool(30);
然后我在同一服务中提交线程。
threadExecutor.submit(monitorinternetconnectivity); //submitting swingworker obejct
我在开始时提交的一些线程和一些i添加运行时,当我在运行时添加时,它不会完成作业或停止运行他们的工作,如监控互联网连接。
有没有办法拥有像swing工作者一样的功能,或者使用多个swingworker的最佳方法。我们应该能够在运行时将新的 swingwokers 添加到executer
服务
答案 0 :(得分:1)
如果您通常遵循在EDT中访问Swing组件表单的规则(查看here),那么您应该没有锁定问题。我怀疑问题在于你的代码,但要确保我们应该看到它。