2011-05-24 61 views
3

我想知道如果我使用@Scheduled在每小时安排一个Bean方法会发生什么,但是方法执行实际上需要一个多小时。@计划线程终止了吗?

执行结束吗?

回答

6

不,没有机制会终止你的线程。如果线程运行时间过长,那就是你的问题:-)。

注意:您可以使用注释@Scheduled(fixedDelay=xxx)仅在旧线程完成时启动新线程。这将避免多个线程并行运行的问题。然而,线程运行时间过长甚至挂起)当然可能会导致其他问题。

如果您担心线程可能需要很长时间,则必须在您的代码中解决该问题。实际上没有其他的方式 - 框架/运行时无法知道“太久”有多长,即使有,也无法知道如何正确地终止线程。当然,它可以杀死它,但这不太可能是一个好的解决方案(参见the mess about Thread.stop())。