springBoot多线程 异步编程

  1. 首先配置一个多线程(异步编程)的配置类,返回一个用于执行多线程的线程池。
@Component
@EnableAsync //开启多线程异步编程
public class MyAsyncConfig implements AsyncConfigurer {
     

    @Override
    public Executor getAsyncExecutor() {
      //返回一个线程池
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(5);
        taskExecutor.setMaxPoolSize(10);
        taskExecutor.setQueueCapacity(25);
        taskExecutor.initialize();
        return taskExecutor;
    }
}
  1. 在需要异步编程的方法上打上注解@Async
@Component
public class AsyncTest {
     

    @Async
    public void test1(){
     
        System.out.println("我是卢本伟");
    }

    @Async
    public void test2(){
     
        System.out.println("我是小智");
    }

}
  1. 测试,CommandLineRunner 是在Spring容器启动后执行
@Component
public class MyRunner implements CommandLineRunner {
     

    @Autowired
    private MyPublisher myPublisher; // 这是事件发布器,与本例无关

    @Autowired
    private AsyncTest asyncTest;

    @Override
    public void run(String... args) throws Exception {
     
        myPublisher.publish("hello world");

        for (int i = 0; i < 10;i++) {
     
            asyncTest.test1();
            asyncTest.test2();
        }

        System.out.println("我到底是不是异步编程");
    }
}

4.输出,可以看到代码并不是顺序执行的

我到底是不是异步编程
我是卢本伟
我是小智
我是卢本伟
我是小智
我是卢本伟
我是小智
我是卢本伟
我是小智
我是卢本伟
我是小智
我是卢本伟
我是小智
我是卢本伟
我是小智
我是卢本伟
我是小智
我是小智
我是小智
我是卢本伟
我是卢本伟

你可能感兴趣的:(SpringBoot,spring,多线程)