@Component
public class ThreadUtil {
@Bean("executorService")
public ExecutorService executorService() {
return new ThreadPoolExecutor(
10, // 核心线程数
30, // 最大线程数
60, TimeUnit.SECONDS, // 空闲线程存活时间
new ArrayBlockingQueue<>(500), // 有界队列
new ThreadFactory() { // 自定义线程名
private final AtomicInteger index = new AtomicInteger(1);
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "task-pool-" + index.getAndIncrement());
}
},
new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
);
}
}
2. 注入线程池
注入线程池,要用@Qualifier来与value的值对应
@Resource()
java复制代码
@Service
public class TaskService {
@Resource(name = "executorService")
private ExecutorService executorService;
public void doTask() {
executorService.execute(() -> {
System.out.println("执行任务 → " + Thread.currentThread().getName());
});
}
}
@AutoWrite()
java复制代码
@Service
public class TaskService {
@Autowired
@Qualifier("executorService")
private ExecutorService executorService;
}
构造器注入
java复制代码
@Service
public class TaskService {
private final ExecutorService executorService;
public TaskService(@Qualifier("executorService") ExecutorService executorService) {
this.executorService = executorService;
}
}