在继续当前线程之前等待线程完成?

时间:2015-05-14 00:39:56

标签: java multithreading

所以我在一个方法中有这个:

Runnable task = new PostLoadRunnable(tool, archive);
SwingUtilities.invokeLater(task);

但是我想这样做,以便在任务线程完成之前,当前方法不会继续。我想做join()之类的事情,但我无法弄清楚如何做到这一点。 task.join()Thread.task.join()不起作用,Thread.currentThread().join()没有给我任何选项来加入我想要的主题。

如何在任务完成之前停止该方法?

2 个答案:

答案 0 :(得分:1)

你根本不想这样做。您在注释中声明此代码在事件调度程序线程中运行。你一定不能阻止这个帖子。否则你将冻结整个用户界面,用户将非常不满意。

可能应该做的是在任务完成之前禁用UI的相关部分。但是,如果不了解您的实际更广泛的要求,就无法确定。

答案 1 :(得分:0)

您可以使用CountDownLatch完成此操作。在PostLoadRunnable run方法中,您可以在finally部分中使用以下代码。

public void run() {
    try {
        ...
    } finally {
        latch.countDown();
    }
}

CountDownLatch latch = CountDownLatch(1);
Runnable task = new PostLoadRunnable(tool, archive, latch);
SwingUtilities.invokeLater(task);
latch.await();
相关问题