• 大数据拆分处理方式


    思路:
    1:参考分页方式将数据拆成指定大小线程数
    2:在每个独立的线程中去读取数据并处理数据
    步骤一实现

    public class IndexIntiTools {
        
        public static AtomicInteger runflag=new AtomicInteger();
    
        //用于测试
        public static List<Object>  syncList=new CopyOnWriteArrayList<Object>();
        private static int idxThreadCount = 10;
    
        private static Executor ex = Executors.newFixedThreadPool(idxThreadCount);
    
        /**
         * 构建索引
         * @param hql
         * @param size
         */
        public static void build(String hql, int size) {
            int pagecount = idxThreadCount;
            int count = size / pagecount;
            int mod = size % pagecount;
            List<Runnable> runList = new ArrayList<Runnable>(pagecount);
            IndexExecutor idxExecutor;
            for (int i = 0; i < pagecount; i++) {
                if (i == (pagecount - 1)) {
                    idxExecutor = new IndexExecutor(hql, i * count, count + mod);
                } else {
                    idxExecutor = new IndexExecutor(hql, i * count, count);
                }
                runList.add(idxExecutor);
            }
            for (Runnable runnable : runList) {
                runflag.incrementAndGet();
                ex.execute(runnable);
            }
        }
    
    }

    步骤二实现

    public class IndexExecutor implements Runnable{
        
        private static final Log log = LogFactory.getLog(IndexExecutor.class);
        private int start;
        private int limit;
        private String hql;
        public IndexExecutor(String hql,int start, int limit) {
            this.hql=hql;
            this.start = start;
            this.limit = limit;
        }
    
        @Override
        public void run() {
            log.info("hql:"+hql+",start:"+start+",limit"+limit);
            //查询数据库(hql,start,limit);
            log.info(list);
            IndexIntiTools.syncList.addAll(list);
            IndexIntiTools.runflag.decrementAndGet();
        }
    
    
    }
  • 相关阅读:
    Nginx-limit_req限速配置示例
    Linux-配置虚拟IP实例
    jQuery中获取a标签的值
    js时间格式化
    a标签与js的冲突
    spring MVC页面的重定向
    EL表达式遍历集合获取下标
    商城项目之实战-购物车模块
    js中得计算问题算式结果拼接成字符串怎么解决
    js中数值类型相加变成拼接字符串的问题
  • 原文地址:https://www.cnblogs.com/xiongmaotailang/p/5239012.html
Copyright © 2020-2023  润新知