管理Spring Async Task Executor中针对特定方法执行的线程数

时间:2018-05-15 09:30:08

标签: java spring multithreading asynchronous task

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

@Override
public Executor getAsyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(100);
    executor.setQueueCapacity(100);
    executor.initialize();
    return executor;
} 

我正在使用三种方法的异步任务,其中两种非常简单快速,但其中一种很复杂,因为它创建了一个过程,其中Matlab例程需要几秒到几分钟以及大量的资源。因此,只有这个任务我想拥有一个线程并将所有其他请求放入队列以实现顺序执行 通过上面的配置我管理我的应用程序的所有线程,有没有办法只限制特定的Async方法? 如果不可能,最佳解决方案可能是使用SemaphoreExecutorServices

1 个答案:

答案 0 :(得分:1)

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

@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")