【问题标题】:How to set timeout for task using ThreadPoolTaskExecutor如何使用 ThreadPoolTask​​Executor 为任务设置超时
【发布时间】:2017-04-27 06:07:56
【问题描述】:

使用ThreadPoolTaskExecutor 时是否可以使任务超时?我无法将ThreadPoolTaskExecutor 更改为ThreadPoolExecutorExecutorService

【问题讨论】:

  • 使用Future.get(long, TimeUnit)?

标签: java multithreading threadpool executorservice


【解决方案1】:

在向您的ThreadPoolTaskExecutor 提交Callable 后,您应该会收到Future。在这个Future 上,您可以使用TimeUnit 调用get(long timeout, TimeUnit unit) 函数,这是超时,程序将等待未来交付或继续运行的最长时间,通过抛出TimeoutException

ie(未经证实的伪代码)

Future myFuture = threadPoolTaskExecutor.submit(myCallable);
try {
    myResult = myFuture.get(5l,TimeUnit.SECONDS);
} catch(TimeoutException e) {
    // Timeout-Related stuff here
}

【讨论】:

    【解决方案2】:

    请参阅下面的 Git hub 链接以获取 TimeOutThreadPoolTask​​Executor

    https://github.com/vivek-gupta-21563/timeoutthreadpool

    您可以执行或提交带有首选超时参数的任务

    execute(() -> System.out.println("Task to execute"), 2, TimeUnit.Minute);
    
    submit(() -> System.out.println("Task to execute"), 2, TimeUnit.Minute);
    

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 2023-04-08
      • 2017-03-02
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2018-02-20
      相关资源
      最近更新 更多