我正在使用Spring的Java配置和AsyncConfigurer:
@Configuration
@EnableAsync
public class AppConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(10);
executor.setThreadNamePrefix("MyExecutor-");
executor.initialize();
return executor;
}
}
现在假设我有一个带有 @Async 注释的方法,而且它已经被调用了两次,还有两个线程正在运行。据我的理解,任何新的调用都将添加到容量为 10 的队列中。现在,如果我收到第 11 个任务,它会怎么样呢?它会拒绝任务像这里所述吗:https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html?还是调用者要等待队列槽可用?我的要求是不超过使用 @Async 方法产生的固定数量的线程,并且当达到最大线程数时让调用者等待。如果我使用具有特定大小的固定线程池的 ConcurrentTaskExecutor,是否可以实现这一点?