首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot异步编程

Spring Boot异步编程
EN

Stack Overflow用户
提问于 2021-02-09 03:09:06
回答 1查看 901关注 0票数 0

我是个软件新手。我正在努力理解Spring Boot中的异步编程。如上所述,当我连续三次请求相同的url时,我设置了线程池大小为2。我的两个请求是异步工作的。第三个在等着呢。这样就可以了。但是当我不使用异步特性(既不是@async注解也不是线程池)时,它仍然像以前一样异步地执行事务。所以我很困惑。Spring Boot rest控制器默认异步运行吗?为什么我们在Spring Boot中使用@async?还是我误解了?

代码语言:javascript
复制
@Service
public class TenantService {
    @Autowired
    private TenantRepository tenantRepository;

    @Async("threadPoolTaskExecutor")
    public Future<List<Tenant>> getAllTenants() {
        System.out.println("Execute method asynchronously - "
                + Thread.currentThread().getName());
        try {
            List<Tenant> allTenants = tenantRepository.findAll();

            Thread.sleep(5000);

            return new AsyncResult<>(allTenants);
        } catch (InterruptedException e) {
            //
        }
        return null;
    }
}
代码语言:javascript
复制
@Configuration
@EnableAsync
public class AsyncConfig {
    @Bean(name = "threadPoolTaskExecutor")
    public Executor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(2);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("AsynchThread-");
        executor.initialize();
        return executor;
    }

    @Bean(name = "threadPoolTaskExecutor2")
    public Executor threadPoolTaskExecutor2() {
        return new ThreadPoolTaskExecutor();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 04:17:48

我假设您使用的是Spring Boot中默认的嵌入式Tomcat。如果是这样的话,那么你就没有误解。Tomcat在默认情况下确实是异步工作的,这意味着它将为每个请求启动一个新线程(有关这一点,请参阅this )。

在这种情况下,@Async注解并不旨在取代Tomcat提供的功能。相反,该注释允许在单独线程中执行bean的任何方法。对于您的特定用例,让Tomcat为每个请求启动一个新线程可能就足够了,但有时您可能希望进一步并行化工作。

例如,当请求必须触发一些繁重的计算,但响应不依赖于它时,您可能希望同时使用这两种方法。通过使用@Async注释,您可以在另一个线程上开始繁重的计算,并让请求更快地完成(有效地允许服务器处理其他请求,而繁重的计算在另一个线程上独立运行)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66107823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档