程序员王小瑞 2023-02-23 15:31 采纳率: 19.2%
浏览 23

Java多线程异步相关问题。

这个方法是一个异步方法,处理一个list集合,第二个框中调用的也是一个异步的方法。但是最后的效果虽说是异步的,但是感觉就是一秒处理一秒处理一次。没有那种同时处理好几个的感觉。

img

img

  • 写回答

4条回答 默认 最新

  • 程序yang 全栈领域优质创作者 2023-02-23 15:47
    关注

    仅供参考:
    这段代码中,虽然使用了@Async注解将方法标记为异步执行,但是默认情况下,Spring异步执行是基于线程池实现的,且线程池的默认大小为1。因此,这段代码可能只会同时处理一个元素,而不是同时处理多个元素。

    为了同时处理多个元素,可以通过配置线程池的大小来增加并发处理的能力。可以在配置类中添加以下内容来设置线程池的大小为10:

    @Configuration
    @EnableAsync
    public class AppConfig implements AsyncConfigurer {
     
        @Override
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(10);
            executor.setMaxPoolSize(10);
            executor.setQueueCapacity(500);
            executor.setThreadNamePrefix("MyExecutor-");
            executor.initialize();
            return executor;
        }
    }
    

    其中,setCorePoolSize和setMaxPoolSize分别设置线程池的核心线程数和最大线程数,setQueueCapacity设置线程池队列的容量,setThreadNamePrefix设置线程名前缀,initialize方法初始化线程池。这样,就可以同时处理多个元素了。

    同时,需要注意的是,增加线程池大小可能会占用更多的系统资源,因此需要根据实际情况合理设置线程池大小。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月23日

悬赏问题

  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 BAT根据上两级文件夹重新命名文件要求BAT
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit