您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如果Spring Scheduled执行在某个固定时间后挂起,则停止

如果Spring Scheduled执行在某个固定时间后挂起,则停止

我不确定这是否会按预期工作。实际上,keepAlive是用于IDLE线程的,并且我不知道您等待资源的线程是否在IDLE中。此外,仅当线程数大于内核数时,除非监视线程池,否则您无法真正知道何时发生。

keepAliveTime-当线程数大于内核数时,这是多余的空闲线程将在终止之前等待新任务的最长时间。

您可以执行以下操作:

public class MyTask {

    private final long timeout;

    public MyTask(long timeout) {
        this.timeout = timeout;
    }

    @Scheduled(cron = "")
    public void cronTask() {
        Future<Object> result = doSomething();
        result.get(timeout, TimeUnit.MILLISECONDS);
    }

    @Async
    Future<Object> doSomething() {
        //what i should do
        //get ressources etc...
    }
}

不要忘记添加 @EnableAsync

无需@Async实现Callable 也可以执行相同操作。

编辑:请记住,它将等待直到超时,但是运行任务的线程不会被中断。发生TimeoutException时,您将需要调用Future.cancel。并在任务中检查isInterrupted()以停止处理。如果要调用api,请确保已选中isInterrupted()。

Java 2022/1/1 18:24:12 有486人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶