问题本身就说明了一切。我知道如何创建线程池执行程序并在给定的线程池执行程序上启动Async,但是我想知道有什么方法可以为不同的线程设置不同的超时时间吗?
示例:
@Async("thread pool executor") Func1
@Async("thread pool executor") Func2
如果是,我该如何实现?
我希望第一个时间为7秒,第二个时间为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);