在线程池执行程序上设置线程超时

时间:2018-12-16 18:57:27

标签: java spring-boot

问题本身就说明了一切。我知道如何创建线程池执行程序并在给定的线程池执行程序上启动Async,但是我想知道有什么方法可以为不同的线程设置不同的超时时间吗?

示例:

@Async("thread pool executor") Func1

@Async("thread pool executor") Func2

如果是,我该如何实现?

我希望第一个时间为7秒,第二个时间为1秒。

1 个答案:

答案 0 :(得分:1)

有一种方法可以在Future对象上设置时间,而不能在ThreadPool上设置时间,但是您不能在线程级别设置时间,但是仍然可以在任务级别设置时间(因为在那里不能保证哪个线程将要执行任务)

示例

@Async("someExecutor")
public Future<String> asyncService() {

    return CompletableFuture.completedFuture("start").thenApply(s->{

    System.out.println(Thread.currentThread().getName()+" - "+Thread.currentThread().getThreadGroup());
        return "hello";
    });     
}

获取Future

Future<String> result = asyncService.asyncService();
    result.get(3, TimeUnit.SECONDS);