在我的应用程序中,我有两个jtextpanes,我有一个包含很少任务的executorservice instacne。 我想确保在执行任何jtextpanes的FocusListener focusGained方法之前,executorservice实例中的所有任务都已完成。 当调用focusLost方法时,我还会向executorservice添加更多任务。

top.addFocusListener(new FocusListener()
{

  public void focusLost(FocusEvent e)
  {

    if (ecaViewControl.isInitialized())
    {
      stopRecording();
      executor.execute(new Runnable()
      {

        public void run()
        {
          ecaViewControl.save(top);

        }
      });

      executor.execute(new Runnable()
      {
        public void run()
        {
          ecaViewControl.closeDocument();

        }
      });

   }

  }

   public void focusGained(FocusEvent e)
   {
   //Need to have completed all the task in executor service before EDT executes the code in here

   });

}

#1楼 票数:1

如果您知道要完成的任务数,请考虑使用CountDownLatch

因此您的代码可能如下所示:

public void run() {
    try {
    // do something here
    } finally {
       latch.countDown()
    }
}

然后在代码中,您正在等待任务完成-只需等待闩锁即可:

latch.await();

或者,如果您可能没有执行者,则可以使用CompletionService

  ask by user1677675 translate from so

未解决问题?本站智能推荐:

2回复

等待任务完成而不会阻塞javafx中的UI

我正在尝试使用JavaFX创建测验应用程序,因为我正在使用调用问题 这些问题将显示在UI线程上 显示问题后,我需要等待直到得到答案为止,如果没有得到答案,则应该调用下一个问题。因此,我在display方法内引入了一个线程来等待超时 从future.get(); 是一个阻
2回复

如何使计时器任务等待runOnUiThread完成

我需要在特定时间段后更新UI,为此我创建了一个计时器计划,并在其中调用runOnUiThread。 我遇到的问题是,到达“ 3”后,计时器线程会跳至“ 8”,然后UI线程将从“ 4”运行。 我想让计时器线程等待直到UI线程在“ 7”完成其工作,然后才应该移至“ 8”。 样本输出
2回复

为什么UI线程被阻止?

在下面的代码中,我试图在单击按钮时运行一个线程。 在按钮监听器中,我创建一个新线程并运行它...但是在运行时,按下按钮时,按钮本身会冻结,应用程序不响应,我收到ANR对话框。 而且,当插座连接成功时甚至连TexView 没有显示。 请让我知道为什么会这样。 按钮监听器 :
1回复

等待UI线程在Android中完成操作

我在onCreate()方法中处于这种情况: 这里的问题是更新操作与显示操作不同步:我总是跳过一个值,因为obj在 UI 线程能够显示其旧值之前更新。 等待 UI 线程完成其显示obj工作然后才进行下一次迭代的正确方法是什么?
1回复

线程的工作方式类似于方法(完成后更新)

我上课在主要活动上划了一条线,这条线用来设定数字。 (如果滑动更改了此行的编号和长度,则为该行。) 所以现在当我在数字上设置行时,我希望制作很少的动画。 例如,我为第一个打开活动,然后在数字6上设置“线”。因此,我想如果第二个为打开活动,我想在数字6上设置“线”。(我有这个)但我希望动
1回复

尝试在任务中嵌套任务以不阻止UI线程

因此,我有一个发送服务调用的任务...该任务具有continuewith,以便在调用返回时程序可以整理数据。 现在,我还希望当调用返回数据时,它基于该数据进行另一个服务调用,而不会阻塞UI线程。 这可能吗? 到目前为止,我的示例代码是:
4回复

使UI线程等待,直到另一个线程完成

我在UI线程中运行了一些方法。 在此方法内部,创建了一个新线程。 我需要UI线程等待这个新线程结束,因为我想等待一些结果才能继续该方法。 但是我不想冻结UI,因此在UI线程正在等待的同时,UI也在响应。 这是我现在所拥有的: 似乎在WaitOne方法期间,UI线程休眠并且没有
1回复

移动/调整窗口大小时任务被阻止

我有一个简单的视图模型,其中包含一个修改后的ObservableCollection ,它使用SynchronizationContext.Current.Send在UI线程上执行对该集合的更改。 该集合由长时间运行的后台线程填充。 我尝试执行此操作的所有不同方式都可以正常工作,但是在移