线程池
场景:添加设备到数据库的同时持久化设备数据到数据库
- 线程池配置文件
/**
* 线程池配置文件
*
* @author :zhangYongJian
* @date :Created in 2022/1/5 15:04
* @version: [1.0.0]
*/
@Configuration
public class ThreadPoolConfig {
// 核心线程池大小
private final int corePoolSize = 2;
// 最大可创建的线程数
private final int maxPoolSize = 2;
// 队列最大长度
private final int queueCapacity = 100;
// 线程池维护线程所允许的空闲时间
private final int keepAliveSeconds = 300;
@Bean(name = "threadPoolTaskExecutor")
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(maxPoolSize);
executor.setCorePoolSize(corePoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveSeconds);
// 线程池对拒绝任务(无线程可用)的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
- 线程池的使用
引用线程池
@Resource(name = "threadPoolTaskExecutor")
private ThreadPoolTaskExecutor executor;
执行任务
- execute方法
public interface Executor {
void execute(Runnable command);
}
- submit方法
public interface ExecutorService extends Executor {
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
}