在我的main方法中,我已经启动了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