我正在使用 SwingWorkers 使我的 GUI 响应。但我无法理解以下内容:
我有一个远程方法,我想在用户按下按钮时从 GUI 调用。
我有按钮的 Action (问题的简写):

//in action of button
SwingWorker worker = new SwingWorker<boolean,Void>(){
   @Override
   public boolean doInBackground(){
      return call_remote_method_here();
   }

};
worker.execute();
//some other code

我的问题是,虽然 gui 似乎有响应,但对远程方法的实际调用是顺序的而不是并发的。我在网络跟踪中注意到了它,并认为该方法被阻塞了。但是后来我在跟踪中看到 SwingWorkers 似乎是按顺序运行的。从日志
2010-09-06 16:58:22,962 [ SwingWorker-pool-4-thread-1 ]调试-->第一个远程方法调用
我得到了响应,然后第二个摇摆 worker 跑了
2010-09-06 16:58:23,227 [ SwingWorker-pool-4-thread-1 ] 调试 --> 第二个远程方法调用
为什么会这样?我认为这是随机交错,但我注意到这两个实例具有相同的名称?摇摆 worker 是否集中起来?这是一种随机行为吗?我不应该看到 2 个并发调用吗?如果它们被重用,我可以做些什么来并发调用而不是并行?

谢谢

最佳答案

问题是,所有 Swingworker 都在同一个后台线程上运行。当您希望它们并发运行时,您可以将它们添加到 Executor Service 中,例如:

Executor executor = Executors.newCachedThreadPool();
executor.execute(yourSwingWorker);

资料来源:Oracle Forums

关于java - 摇摆 worker 的后台任务变得连续,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3652973/

10-13 07:31