我想知道如果我用@Scheduled安排一个Bean方法会发生什么,比方说,每小时一次,但实际上方法执行需要一个多小时。
执行会终止吗?
答案 0 :(得分:6)
不,没有机制可以终止你的线程。如果线程运行“太长”,那就是你的问题: - )。
注意:您可以使用注释@Scheduled(fixedDelay=xxx)
仅在旧线程完成时启动新线程。这样可以避免多个线程并行运行的问题。但是,一个运行时间过长甚至悬挂的线程当然可能会导致其他问题。
如果您担心线程可能需要太长时间,则必须在代码中解决该问题。实际上没有其他方法 - 框架/运行时无法知道“太长”多长时间,即使它已经存在,也无法知道如何正确终止线程。当然,它可能会杀死它,但这不太可能是一个好的解决方案(参见the mess about Thread.stop()
)。