当前位置 : 主页 > 编程语言 > java >

java 大数据 分批+线程处理

来源:互联网 收集:自由互联 发布时间:2023-09-06
背景:考虑到数据大,就会超时。 解决方法:1.先把数据分批,2.在加入线程异步处理。 代码如下: public static void main(String[] args) { //1.先把数据分批 List batchList = this.splitListToList(ids,5

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

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

代码如下:

public static void main(String[] args) { //1.先把数据分批 List> batchList = this.splitListToList(ids,500); // 分成多个集合 处理 ,每个处理500 for (List 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 List> splitListToList(List list, int splitSize) { List> listBatch= new ArrayList>(); 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 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); } }

【文章原创作者:美国站群多ip服务器 http://www.558idc.com/mgzq.html欢迎留下您的宝贵建议】
上一篇:C - Maya Calendar
下一篇:没有了
网友评论