线程池创建及使用--高效
1、依据系统合理创建线程池
/** * 获取系统处理器个数,作为线程池数量 */ int nThreads = Runtime.getRuntime().availableProcessors(); ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("pool-%d").build(); /** * Common Thread Pool */ ExecutorService pool = new ThreadPoolExecutor(nThreads, 200, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
2、任务的创建
package com.hikvision.highwaydoc.util; import com.hikvision.highwaydoc.constants.EnumMinioType; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.concurrent.Callable; /** * @author liuyueyi * @version 1.0.0 * @ClassName UploadPicThread.java * @Description ---- * @createTime 2023年01月04日 19:42:00 */ public class UploadPicTask implements Callable<String> { private MinioTool minioTool; private byte[] data; private String fileName; private EnumMinioType minioBucket; public UploadPicTask(MinioTool minioTool, byte[] data, String fileName, EnumMinioType minioBucket) { this.minioTool = minioTool; this.data = data; this.fileName = fileName; this.minioBucket = minioBucket; } @Override public String call() throws Exception {
// 业务代码 InputStream inputStream; inputStream = new ByteArrayInputStream(data); String url = minioTool.uploadFile(inputStream, fileName, minioBucket); return url; } }
3、线程池的使用(多任务以及单任务一样处理)
ArrayList<Future<String>> uploadPicTaskList = new ArrayList<>(); for (PictureDataDTO pictureDataDTO : pictureDataDTOSaveList) { Future<String> future = pool.submit(new UploadPicTask(minioTool, pictureDataDTO.getPictureData().getData(), pictureDataDTO.getDocPicId() + suffix, EnumMinioType.OTHER)); uploadPicTaskList.add(future);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~