如何立即杀死Java中的线程

时间:2020-09-03 15:09:02

标签: java multithreading quartz-scheduler

我有一个主线程,它是一个休息端点。 我在那个端点生成了一个新的Runnable并传递给Executor服务。 我通过调用join()方法使主线程在Runnable上等待。 然后在Runnable的run()方法中,我使用Quartz Scheduler运行Quartz作业。 现在,此Quartz作业在单独的线程中运行。

但是我的问题是,即使作业已完成执行并且也被调度程序删除, 主线程仍在等待Runnable,并且在作业完成执行约40至50秒后开始执行主程序。

我想在作业完成执行后立即终止可运行线程。 我该如何实现?

还计划了Job之后,立即执行Runnable的run()方法的最后一行。

1 个答案:

答案 0 :(得分:0)

通过在while循环中使主线程等待布尔标志为true来解决该问题。 然后在JobListener中完成作业执行时将标志设置为false。 在侦听器的jobWasExecuted()方法中,标志设置为false。

也在JobListener中尝试使用interrupt()和stop()。

但是我想Quartz线程正在执行作业的可运行线程上锁定。 也许这就是为什么即使在作业执行完成后仍存在40到50秒的延迟。

此外,我在Job对象中使用@Transient变量。 而且每个作业都有自己的线程,因此不需要volatile。

相关问题