代码之家  ›  专栏  ›  技术社区  ›  Cratylus

背景:摇摆工人的任务变得循序渐进

  •  4
  • Cratylus  · 技术社区  · 14 年前

    我有一个远程方法,当用户按下按钮时,我想从GUI调用它。

    //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看起来有响应,但对远程方法的实际调用是连续的,而不是并发的。我在网络跟踪中注意到了它,并认为该方法是阻塞的。但后来我从痕迹中看到,这些骗子似乎是在按顺序逃跑。从

    SwingWorker-pool-4-thread-1型 ]调试-->第一次远程方法调用

    我得到回应,然后第二个骗子跑了

    2010-09-06 16:58:23,227 [ SwingWorker-pool-4-thread-1型

    谢谢

    2 回复  |  直到 7 年前
        1
  •  7
  •   crusam    14 年前

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

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

    Oracle Forums

        2
  •  4
  •   Matthieu BROUILLARD    14 年前

    你可以看看这个 post

    给定的解决方案之一是使用您自己的executor服务执行SwingWorker实例。jdk1.6update18中的一个变化似乎改变了默认行为。