package com.vci.starter.web.autoconfigure; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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; import java.util.concurrent.TimeUnit; /** * 线程池,增加监控 * @author weidy * @date 2021-2-2 */ public class VciThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { /** * 日志 */ private static final Logger logger = LoggerFactory.getLogger(VciThreadPoolTaskExecutor.class); /** * 打印日志 * @param prefix 前缀 */ private void printLog(String prefix){ ThreadPoolExecutor threadPoolExecutor = getThreadPoolExecutor(); if (null == threadPoolExecutor) { return; } logger.info(prefix + ", task_count [" + threadPoolExecutor.getTaskCount() + "], completed_task_count [" + threadPoolExecutor.getCompletedTaskCount() + "], active_thread_count [" + threadPoolExecutor.getActiveCount() + "], blocking_queue_size [" + threadPoolExecutor.getQueue().size() + "], thread_pool_size [" + threadPoolExecutor.getPoolSize() + "], largest_pool_size_ever [" + threadPoolExecutor.getLargestPoolSize() + "], core_thread_pool_size [" + threadPoolExecutor.getCorePoolSize() + "], max_thread_pool_size [" + threadPoolExecutor.getMaximumPoolSize() + "], thread_keep_alive_time [" + threadPoolExecutor.getKeepAliveTime(TimeUnit.SECONDS) + "]"); } /** * 执行 * @param task 任务的对象 */ @Override public void execute(Runnable task) { printLog("1. do execute 执行任务"); super.execute(task); } /** * 执行任务,并设置超时 * @param task 任务的对象 * @param startTimeout 超时 */ @Override public void execute(Runnable task, long startTimeout) { printLog("2. do execute,执行任务,并且设置超时" ); super.execute(task, startTimeout); } /** * 提交 * @param task 任务 * @return 执行 */ @Override public Future submit(Runnable task) { printLog("1. do submit,提交"); return super.submit(task); } /** * 提交 * @param task 任务 * @param 类型 * @return 类型 */ @Override public Future submit(Callable task) { printLog("2. do submit"); return super.submit(task); } /** * 提交可监听 * @param task 任务 * @return 监听 */ @Override public ListenableFuture submitListenable(Runnable task) { printLog("1. do submitListenable"); return super.submitListenable(task); } /** * 提交可监听 * @param task 任务 * @param 类型 * @return 监听的类型 */ @Override public ListenableFuture submitListenable(Callable task) { printLog("2. do submitListenable"); return super.submitListenable(task); } }