4

我正在使用 swing,在我的应用程序中,我需要并行运行许多线程,例如每 5 秒检查一次互联网连接、监控文件系统更改、从服务器同步文件。

上面所有耗时的任务都在运行,SwingWorker所以我的 GUI 不应该冻结。

同时我需要运行一些其他耗时的任务,例如将文件上传到服务器。为此,我还使用了 swingWorker。然后我将所有这些 swingworker 提交给 executerService 进行线程池,这样它们就不会相互影响。

我的执行器服务是这样的。我认为30个线程对我来说就足够了。

static ExecutorService threadExecutor;
threadExecutor = Executors.newFixedThreadPool(30);

然后我在同一个服务中提交线程。

threadExecutor.submit(monitorinternetconnectivity); //submitting swingworker obejct

我在开始时提交的一些线程和一些我添加运行时的线程,当我在运行时添加时,它不会完成工作或停止运行它们的工作,比如监控互联网连接。

有没有办法像摇摆工人一样拥有相同的功能,或者使用多个摇摆工人的最佳方式。我们应该能够在运行时添加新的Swingwokerexecuter服务

4

1 回答 1

1
  1. SwingWorker 使用它自己的线程池。
  2. SwingWorker 应该用于长时间运行的任务(即任何需要超过几毫秒的任务),之后需要更新 GUI。
  3. 不应调用更新 EDT 之外的 gui 元素(即来自 SwingWorker.done() 方法)

如果您通常遵循在 EDT 中访问 Swing 组件表单的规则(看这里),那么您应该不会遇到锁定问题。我怀疑问题在于您的代码,但要确保我们应该看到它。

于 2013-02-24T15:24:55.993 回答