Java 管理特定方法的Spring异步任务执行器中的线程执行数

Java 管理特定方法的Spring异步任务执行器中的线程执行数,java,spring,multithreading,asynchronous,task,Java,Spring,Multithreading,Asynchronous,Task,我在应用程序中使用SpringAsync任务,我遇到了一个需要所有服务器资源的任务问题。 特别是,我有以下配置: @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); executor.setMaxPoolSize(100); execut

我在应用程序中使用SpringAsync任务,我遇到了一个需要所有服务器资源的任务问题。 特别是,我有以下配置:

@Override
public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(100);
    executor.setQueueCapacity(100);
    executor.initialize();
    return executor;
} 
我在三种方法上使用了aync任务,两种方法非常简单和快速,但一种方法很复杂,因为它创建了一个过程,一个Matlab例程需要几秒钟到几分钟的时间和大量的E资源。因此,仅对于此任务,我希望有一个线程并将所有其他请求放入队列,以实现顺序执行。
通过上面的配置,我管理应用程序的所有线程,有没有办法只限制特定的异步方法?
如果不可能,最好的解决方案可能是使用或?

您想要的是为特定的长时间运行任务创建另一个自定义线程池,这样它就不会阻止您的线程运行

@Bean(name= "myExecutor")
public Executor getCustomAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(100);
    executor.setQueueCapacity(100);
    executor.initialize();
    return executor;
} 
并为您的异步方法设置它:

@Async("myExecutor")

谢谢,它似乎起作用了。我想知道的是,为什么第一个执行器会覆盖executor方法,而第二个是no。在您的设置中,您的executor用于所有
@Async
方法。所有
@Async
仍然共享同一个池,因此长时间运行的方法会阻止其他线程执行。当设置
@Bean
并将其指定给特定的
@Async
时,使用您提供的默认执行器的其他方法,为什么特定的
@Async
仅使用指向池。它们不会互相阻挡