java 大数据 分批+线程处理

📅 发布时间:2026/7/28 21:35:18
java 大数据 分批+线程处理 背景考虑到数据大就会超时。解决方法1.先把数据分批2.在加入线程异步处理。代码如下public static void main(String[] args) { //1.先把数据分批 ListListString batchList this.splitListToList(ids,500); // 分成多个集合 处理 每个处理500 for (ListString 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 ListListT splitListToList(ListT list, int splitSize) { ListListT listBatch new ArrayListListT(); 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; } ListT 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); } }