在JAVA中,当守护程序线程满足某些条件时,我们可以让main方法等待(sleep)吗?

时间:2017-03-20 12:33:29

标签: java multithreading

在我的main方法中,我已经启动了1个守护程序线程,它在后台运行以检查某些条件是否满足,如果满足则我的主线程应该等待一段时间然后继续。

有可能这样做吗?从另一个线程控制主线程。

实际上我正在尝试自动化一个应用程序,其中显示了许多弹出窗口,我想在后台使用1个线程来检查弹出窗口,如果显示弹出窗口,那么我的主要方法应该等待一段时间然后重新开始。

1 个答案:

答案 0 :(得分:1)

您可以在公共wait()对象上使用notify()lock

从main方法内部,同步lock对象。在synchronized块中启动另一个线程并在wait()对象上调用lock

在第二个线程的run方法中,在lock对象上写一个synchronized块并进行处理。完成后,您可以在同一个notify对象上调用lock

主线程然后可以检查是否已经设置了所需的状态,然后可以决定进一步的操作(如果您希望主线程进一步完成执行或再次等待并让第二个线程再次执行处理)如果您希望第二个线程再次执行(重试)处理然后如上所述,您可以调用notify()对象上的lock,然后可以在同一个wait()对象上调用lock

这是两个线程之间通常的通信方式。但是,如果它只是一次性过程并且您不希望它多次发生,那么您可以简单地使用join()方法。主线程可以在第二个线程上加入。直到第二个线程将处理它的任务,主线程将等待处理完成。一旦第二个线程完全执行(run ()方法结束),控制将到达主线程。

我建议你看看这些方法。 consumer-producer是了解这些方法的一个着名问题。您还可以在回答另一篇文章时看到这些内容。 https://stackoverflow.com/a/42049397/504133