springboot 多线程

/**
 * @Description: 线程池配置   spring内置  TaskExecutor 
 */
@Configuration
@EnableAsync
public class ThreadPoolConfig{

	/**
	 * 打印日志
	 */
	private Logger logger = LoggerFactory.getLogger(getClass());

	/**
	 * cpu 核心数量
	 */
	public static final int cpuNum = Runtime.getRuntime().availableProcessors();

	/**
	 * 线程池配置
	 *
	 * @return
	 */
	@Bean("taskExecutor")
	public TaskExecutor taskExecutor() {
		ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
		// 配置核心线程池数量
		taskExecutor.setCorePoolSize(cpuNum);
		// 配置最大线程池数量
		taskExecutor.setMaxPoolSize(cpuNum * 2);
		/// 线程池所使用的缓冲队列
		taskExecutor.setQueueCapacity(2);
		// 等待时间 (默认为0,此时立即停止),并没等待xx秒后强制停止
		taskExecutor.setAwaitTerminationSeconds(60);
		// 空闲线程存活时间
		taskExecutor.setKeepAliveSeconds(60);
		// 等待任务在关机时完成--表明等待所有线程执行完
		taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
		// 线程池名称前缀
		taskExecutor.setThreadNamePrefix("thread-pool-");
		// 线程池拒绝策略
		taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
		// 线程池初始化
		taskExecutor.initialize();
		logger.info("线程池初始化......");
		return taskExecutor;
	}


}

1、调用方式一

 @Async("taskExecutor") // 对应线程池里的bean
    public void doto(InputStream inputStream) {
        //todo
    }

2、调用方式二 (注入)

 @Resource
 private TaskExecutor taskExecutor;   

3、调用

 taskExecutor.execute(() -> this.dotoSomething(int userId));

4、拒绝策略

1.AbortPolicy 
中止策略,该策略是默认策略。抛出一个RejectedExecutionException异常
2.DiscardPolicy
抛弃策略,直接丢弃不做任何操作。 
3.DiscardOldestPolicy  
抛弃旧任务策略,将头任务出队。
4.CallerRunsPolicy
调用者运行。直接调用Runnable的run方法运行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值