这个问题在这里已经有答案了:
如何在java中终止线程((16个答案)
4个月前关门了。
我有一个主线程,它是一个rest端点。我在该端点生成一个新的runnable并传递给executor服务。我通过调用join()方法使主线程等待我的runnable。然后在runnable的run()方法中,使用quartz调度器运行quartz作业。现在这个quartz作业在一个单独的线程中运行。
然而,我的问题是,即使在作业已经完成执行并且也被调度程序删除之后,主线程仍然在等待runnable,并且主执行在作业完成执行后大约40到50秒后开始。
我想在作业完成执行后立即终止可运行线程。我要怎么做?
同样,在调度作业之后,runnable的run()方法的最后一行也会立即执行。
1条答案
按热度按时间piv4azn71#
通过使主线程在while循环中等待布尔标志为true,解决了此问题。然后在joblistener中完成作业执行时将标志设为false。在侦听器的jobwasexecuted()方法中,flag被设置为false。
也尝试在joblistener中使用interrupt()和stop()。
但我猜quartz线程锁定了执行作业的可运行线程。也许这就是为什么即使在作业执行完成之后,也会有40到50秒的延迟。
另外,我在job对象中使用了@transient变量。而且每个作业都有自己的线程,因此不需要volatile。