package com.ard.work.config; 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; @Configuration @EnableAsync public class AsyncConfiguration { /** * 相机SDK专用异步线程池 */ @Bean("cameraSdkExecutor") public Executor cameraSdkExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 核心线程数:根据业务并发量调整 executor.setCorePoolSize(10); // 最大线程数 executor.setMaxPoolSize(50); // 队列容量 executor.setQueueCapacity(500); // 线程空闲时间 executor.setKeepAliveSeconds(60); // 线程名前缀 executor.setThreadNamePrefix("camera-sdk-"); // 拒绝策略:队列满时由调用线程执行(避免任务丢失) executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 初始化 executor.initialize(); return executor; } /** * 相机任务线程池(控制相机并发) */ @Bean("cameraPTZExecutor") public ThreadPoolTaskExecutor cameraPTZExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(20); executor.setMaxPoolSize(50); executor.setQueueCapacity(200); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("camera-ptz-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.initialize(); return executor; } /** * SDK调用线程池(防止SDK卡死拖垮主线程池) */ @Bean("timeoutExecutor") public ThreadPoolTaskExecutor timeoutExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(50); executor.setMaxPoolSize(100); executor.setQueueCapacity(500); executor.setKeepAliveSeconds(60); executor.setThreadNamePrefix("camera-timeout-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); executor.initialize(); return executor; } }