创建线程池+springboot异步创建例子(注解)

  1. 首先创建线程池,下面代码
  2. 配置文件配置
		#线程池配置
		task.queue.corePoolSize=10
		task.queue.maxPoolSize=30
		task.queue.queueCapacity=8
		task.queue.keepAlive=60`
@EnableAsync(proxyTargetClass = true)
@Configuration
public class AsycTaskExecutorConfig {

    @Value("${task.queue.corePoolSize}")
    private int corePoolSize;//线程池维护线程的最少数量
    @Value("${task.queue.maxPoolSize}")
    private int maxPoolSize;//线程池维护线程的最大数量
    @Value("${task.queue.queueCapacity}")
    private int queueCapacity; //缓存队列
    @Value("${task.queue.keepAlive}")
    private int keepAlive;//允许的空闲时间

    @Bean
    public Executor taskQueueExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 设置核心线程数
        executor.setCorePoolSize(corePoolSize);
        // 设置最大线程数
        executor.setMaxPoolSize(maxPoolSize);
        // 设置队列容量
        executor.setQueueCapacity(queueCapacity);
        // 设置默认线程名称
        executor.setThreadNamePrefix("线程-");
        //对拒绝task的处理策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        // 设置线程活跃时间(秒)
        executor.setKeepAliveSeconds(keepAlive);
        executor.initialize();
        // 等待所有任务结束后再关闭线程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        return executor;
    }
  1. 自己创建一个类,里面放置异步方法,一定要加上 @Async注解
		@Component
		public class AsyThread {
		    @Async
		    public void sendMessage() {
		    
		        System.out.println("马上执行异步消息了");
	        try {
	            Thread.sleep(5000);
	        } catch (InterruptedException e) {
	            e.printStackTrace();
	        }
	        System.out.println("---------发消息了---------"+Thread.currentThread().getName());
		    }
		}
  1. 这里我们就可以在controller里面正常写我们的代码,我写了个简单例子
		@Autowired
	    AsyThread asyThread;
	    
	    @Autowired
	    DemoService demoService;
	    
	    @RequestMapping("testDemo")
	    public void testDemo(){
	    
        asyThread.sendMessage();
        User user = demoService.findUser();
        System.out.println(user.toString() + "------用户对象------");
        System.out.println("当前线程"+Thread.currentThread().getName());
    } 
  1. 演示效果(没有加 @Async注解)
    没有实现异步效果
  2. 演示效果(加 @Async注解)
    实现了异步效果
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值