记录一下 线程池 ThreadPoolExecutor 的使用
创建公共接口
public interface TaskInterface {
/**
* 开始刷新
*/
void refresh();
}
实现类
@Service
public class StartTaskService implements TaskInterface {
public void refresh() {
// 代码逻辑
}
}
使用线程池
// 引入接口实现类
@Autowired
private List<TaskInterface> taskList;
/**
* 开始任务
*/
private void start() {
// 创建线程池
ExecutorService threadPool = new ThreadPoolExecutor(7, 7, 0L,
TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
try {
for (TaskInterface task: taskList) {
threadPool.execute(() -> {
String simpleName = imports.getClass().getSimpleName();
imports.refresh();
log.info("[任务结束] [report: {}]", simpleName);
});
}
// 待任务结束后关闭线程池
threadPool.shutdown();
boolean result = threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
if (result) {
// 此处可以等所有任务结束后,执行其他操作
}
} catch (InterruptedException e) {
e.printStackTrace();
log.error("[异常]", e);
}
}