@Scheduled 线程是否已终止?

发布于 2024-11-09 05:07:18 字数 88 浏览 0 评论 0原文

我想知道如果我用 @Scheduled 安排一个 Bean 方法,例如每小时一次,但该方法执行实际上需要一个多小时,会发生什么。

是否会终止执行?

I am wondering what happens if I schedule a Bean method with @Scheduled at, lets say, every hour, but the method execuation takes more than one hour actually.

Will the execution be terminated?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

反差帅 2024-11-16 05:07:18

不,没有任何机制可以终止您的线程。如果线程运行“太长”,那就是你的问题:-)。

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

如果您担心线程可能花费太长时间,则必须在代码中解决这个问题。确实没有其他方法 - 框架/运行时无法知道“太长”有多长,即使知道,它也无法知道如何正确终止线程。当然,它可能会杀死它,但这不太可能是一个好的解决方案(参见关于 Thread.stop() 的混乱)。

No, there is no mechanism that will terminate your thread. If the thread runs for "too long", that is your problem :-).

Note: You can use the annotation @Scheduled(fixedDelay=xxx) to only start a new thread when the old thread has finished. That would avoid the problem of multiple threads running in parallel. However, a thread running for too long or even hanging) may of course still cause other problems.

If you are worried that a thread might take too long, you will have to address that in your code. There really is no other way - the framework/runtime has no way of knowing how long is "too long", and even if it had, it has no way of knowing how to properly terminate your thread. It could just kill it, of course, but that is unlikely to be a good solution (cf. the mess about Thread.stop()).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文