springboot多线程注解 @Async(“asyncExecutor“)

springboot多线程注解 @Async(“asyncExecutor“)

定义线程池 AsyncTaskExecutePool.java

import java.util.concurrent.ThreadPoolExecutor;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import lombok.extern.slf4j.Slf4j;

@Slf4j  
@Configuration  
@EnableAsync 
public class AsyncTaskExecutePool {
	
	
	/** 线程池维护线程的最少数量   */  
    private int corePoolSize = 5;  
    /** 线程池维护线程的最大数量  */  
    private int maxPoolSize = 50;  
    /** 线程池所使用的缓冲队列   */  
    private int queueCapacity = 2; 
    
    
	@Bean(name = "asyncExecutor")
	public ThreadPoolTaskExecutor asyncExecutor() {
		ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();  
        executor.setCorePoolSize(corePoolSize);    
        executor.setMaxPoolSize(maxPoolSize);    
        executor.setQueueCapacity(queueCapacity);    
        executor.setKeepAliveSeconds(3600);    
        executor.setThreadNamePrefix("asyncExecutor----");    
        executor.setWaitForTasksToCompleteOnShutdown(true);
        // rejection-policy:当pool已经达到max size的时候,如何处理新任务    
        // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行    
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());  
        executor.initialize();    
        log.info("------------------asyncExecutor start -------------------");
        return executor;
	}
	
	@Bean(name = "delAsyncExecutor")
	public ThreadPoolTaskExecutor delAsyncExecutor() {
		ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();  
        executor.setCorePoolSize(corePoolSize);    
        executor.setMaxPoolSize(maxPoolSize);    
        executor.setQueueCapacity(queueCapacity);    
        executor.setKeepAliveSeconds(3600);    
        executor.setThreadNamePrefix("delAsyncExecutor----");    
        executor.setWaitForTasksToCompleteOnShutdown(true);
        // rejection-policy:当pool已经达到max size的时候,如何处理新任务    
        // CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行    
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());  
        executor.initialize();    
        log.info("------------------delAsyncExecutor start -------------------");
        return executor;
	}

}

线程执行任务 AsyncTask.java

import java.util.Map;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;


@Component 
@Slf4j
public class AsyncTask {
	@Async("asyncExecutor")
	public void newThread(String key,RedisDao redis)  {
		redis.delete(key);
	}
}

调用多线程

.
.
.

	@Autowired
	private AsyncTask asyncTask;
	@Autowired
	@Qualifier("asyncExecutor")
	private ThreadPoolTaskExecutor executor;

.
.
.

		int activeCount = executor.getActiveCount();
		while (activeCount >= 49) {
			Thread.sleep(10000);
			activeCount = executor.getActiveCount();
			log.info("executor-ActiveCount " +activeCount);
		}
		asyncTask.newThread(key,redisDao);
.
.
.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值