springboot笔记示例二:线程池集成正确姿势

示例二:线程池集成

NitExecutorConfig.java

package cn.cuiot.municipal.gather.config;

import lombok.extern.slf4j.Slf4j;
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 java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 
 * @Title: NitExecutorConfig.java
 * @Description: 逆天线程配置
 * @author: 逆天-逍遥哥哥
 * @date: 2021年6月15日 下午4:45:42
 * @version: V1.0
 * @Copyright: NIT
 */
@Configuration
@EnableAsync
@Slf4j
public class NitExecutorConfig {
	private int corePoolSize = 100;
	private int maxPoolSize = 100;
	private int queueCapacity = 100;
	private String namePrefix = "NIT---";
	@Bean
	public Executor asyncNitServiceExecutor() {
		log.debug("asyncNitServiceExecutor.init");
		ThreadPoolTaskExecutor executor = new NitThreadPoolTaskExecutor();
		executor.setCorePoolSize(corePoolSize);
		executor.setMaxPoolSize(maxPoolSize);
		executor.setQueueCapacity(queueCapacity);
		executor.setThreadNamePrefix(namePrefix);
		executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
		// 执行初始化
		executor.initialize();
		return executor;
	}
}

NitThreadPoolTaskExecutor执行器

package cn.cuiot.municipal.gather.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.util.concurrent.ListenableFuture;

import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 
 * @Title: NitThreadPoolTaskExecutor.java
 * @Description: 逆天线程池执行器
 * @author: 逆天-逍遥哥哥
 * @date: 2021年6月15日 下午6:45:42
 * @version: V1.0
 * @Copyright: NIT
 */
@Slf4j
public class NitThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1022908077279022770L;

	private void logThreadPoolStatus() {
		ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor();
		if (null == threadPoolExecutor) {
			return;
		}
		log.info("{}, {},taskCount [{}], completedTaskCount [{}], activeCount [{}], queueSize [{}]",
				this.getThreadNamePrefix(), threadPoolExecutor.getTaskCount(),
				threadPoolExecutor.getCompletedTaskCount(), threadPoolExecutor.getActiveCount(),
				threadPoolExecutor.getQueue().size());
		log.info("核心线程数:{}, 最大线程数:{}, 当前线程数: {}, 活跃的线程数: {}", getCorePoolSize(), getMaxPoolSize(), getPoolSize(),
				getActiveCount());
	}
	@Override
	public void execute(Runnable task) {
		logThreadPoolStatus();
		super.execute(task);
	}
	@Override
	public Future<?> submit(Runnable task) {
		logThreadPoolStatus();
		return super.submit(task);
	}
	@Override
	public <T> Future<T> submit(Callable<T> task) {
		logThreadPoolStatus();
		return super.submit(task);
	}
	@Override
	public ListenableFuture<?> submitListenable(Runnable task) {
		logThreadPoolStatus();
		return super.submitListenable(task);
	}
	@Override
	public <T> ListenableFuture<T> submitListenable(Callable<T> task) {
		logThreadPoolStatus();
		return super.submitListenable(task);
	}
}

使用示例

	@Autowired
	private Executor asyncNitExecutor;

	//异步执行
	asyncNitExecutor.execute(() -> {
			// 存储传输日志
			GewuApiLogEntiy gewuApiLogEntiy = GewuApiLogEntiy.builder()
					.apiName("控制api")
					.apiRequest(request.toJSONString())
					.apiResponse(body.toString())
					.apiType(1)
					.transId(request.getString("trans_id"))
					.resultCode("")
					.build();
			gewuApiLogService.save(gewuApiLogEntiy);
		});

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天-逍遥哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值