package com.tanpu.fund.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; /** * 自定义线程池 * 提交线程的时候都会将当前线程池的运行状况打印出来 */ @Slf4j public class VisiableThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { /** * 打印线程池当前信息 * 任务总数、已完成数、活跃线程数,队列大小打印出来 * * @param prefix */ private void showThreadPoolInfo(String prefix) { ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor(); if (threadPoolExecutor == null) { return; } log.info("{}, {}, taskCount [{}], completedTaskCount [{}], activeCount [{}], queueSize [{}]", this.getThreadNamePrefix(), prefix, threadPoolExecutor.getTaskCount(), threadPoolExecutor.getCompletedTaskCount(), threadPoolExecutor.getActiveCount(), threadPoolExecutor.getQueue().size()); } @Override public void execute(Runnable task) { showThreadPoolInfo("do execute1"); super.execute(task); } @Override public void execute(Runnable task, long startTimeout) { showThreadPoolInfo("do execute2"); super.execute(task, startTimeout); } @Override public Future<?> submit(Runnable task) { showThreadPoolInfo("do submit1"); return super.submit(task); } @Override public <T> Future<T> submit(Callable<T> task) { showThreadPoolInfo("do submit2"); return super.submit(task); } @Override public ListenableFuture<?> submitListenable(Runnable task) { showThreadPoolInfo("do submitListenable1"); return super.submitListenable(task); } @Override public <T> ListenableFuture<T> submitListenable(Callable<T> task) { showThreadPoolInfo("do submitListenable2"); return super.submitListenable(task); } }