Java多线程异步相关问题。

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

img

img

仅供参考:
这段代码中,虽然使用了@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方法初始化线程池。这样,就可以同时处理多个元素了。

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

Async不生效原因:
两个方法都在同一个类里面,只是一个方法调用另一个异步方法,不生效。

解决方法:拆分两个方法,将异步方法单独放在一个类里面,然后再去调用就解决了

每次掉用都是一个线程在工作。