java 大数据 分批+线程处理
2026/7/28 21:34:54 网站建设 项目流程

背景:考虑到数据大,就会超时。

解决方法:1.先把数据分批,2.在加入线程异步处理。

代码如下:

public static void main(String[] args) { //1.先把数据分批 List<List<String>> batchList = this.splitListToList(ids,500); // 分成多个集合 处理 ,每个处理500 for (List<String> list : batchList) { //2.先初始化线程,在加入线程异步处理。 AsyncThreadPool.getInstance().execute(new Runnable() { @Override public void run() { try { //你的处理逻辑代码 } catch (Exception e) { logger.error("异常:",e); } } } } }
/** * 将一个list分隔成多个list * @param list 需要分隔的list * @param splitSize 分隔的每个大小 * @return 分隔后的多个list放在一个List 里 */ public static <T> List<List<T>> splitListToList(List<T> list, int splitSize) { List<List<T>> listBatch= new ArrayList<List<T>>(); int listSize = list.size(); int batchSize = listSize / splitSize; // 总批数 if (listSize % splitSize > 0) { batchSize += 1; } for (int i = 0; i < batchSize; i++) { int start = i * splitSize; int end = (i + 1) * splitSize; if (end > listSize) { end = listSize; } List<T> batchList = list.subList(start, end); listBatch.add(batchList); } return listBatch; }
/** * 异步线程池 初始化10个线程 */ public class AsyncThreadPool { protected final Logger logger = Logger.getLogger(getClass()); private static AsyncThreadPool asyncThreadPool = null; private static ExecutorService threadPool = null; private AsyncThreadPool(){ int processors = 10; logger.info("初始化:" + processors + "个异步线程池"); threadPool = Executors.newFixedThreadPool(processors); } public final static AsyncThreadPool getInstance(){ if(asyncThreadPool == null){ asyncThreadPool = new AsyncThreadPool(); } return asyncThreadPool; } public void execute(Runnable thread){ threadPool.execute(thread); } public void submit(Runnable thread){ threadPool.submit(thread); } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询