• 多线程的应用


    实例说明,有一个庞大的实例的list集合,如果我们把它插入数据库。可以用多线程的思路解决。这样可以让插入操作继续在后台执行,不妨碍程序往下执行。用户不必等待。

        private void insertDetailByXiancheng(
                List<AdminDataContentDetail> dataContentDetailList) {
            int pageSize = 50, totalPage = 0;
            totalPage = dataContentDetailList.size() / pageSize;
            if (dataContentDetailList.size() % pageSize > 0) {
                totalPage++;
            }
            for (int page = 0; page < totalPage; page++) {
                List<AdminDataContentDetail> currentData = new ArrayList<AdminDataContentDetail>();
                if (page == totalPage - 1) {
                    currentData = dataContentDetailList.subList(page * pageSize, dataContentDetailList.size());
                } else {
                    currentData = dataContentDetailList.subList(page * pageSize, page * pageSize + pageSize);
                }
                //通过线程 并发执行  但是由于并发太多 需要主动休眠(效率比顺序执行高)
    
                Thread rthread = new Thread(new ScanToinsertDetail(currentData,contentDetailService));
                rthread.start();
                //必须休眠 不然线程太多会报错
                //Thread.sleep(2000);
            }
        }

    把list集合分割交由一个线程执行,提高效率。

    /**
     * 對多量的新增表信息進行多線程處理
    * @author doushuihai  
    * @date 2018年7月5日上午11:22:30  
    * @TODO
     */
    public class ScanToinsertDetail  implements Runnable {
        List<AdminDataContentDetail> dataContentDetailList ;// 获取新增的表信息
        private IAdminDataContentDetailService contentDetailService;
    
        public ScanToinsertDetail(List<AdminDataContentDetail> dataContentDetailList,
                IAdminDataContentDetailService contentDetailService) {
            super();
            this.dataContentDetailList = dataContentDetailList;
            this.contentDetailService = contentDetailService;
        }
    
        public void run() {        
            contentDetailService.insertByBatch(dataContentDetailList);
            //itablescan.DatasourceConfigService.toTableScan(id, user);
        }
    
        
    }
    多线程里的contentDetailService由于传入问题,无法在ScanToinsertDetail类里直接获取。(可能是我对Spring理解不深,菜~~)。涉及不到这的可以忽略
    
    
    
    
  • 相关阅读:
    数据库从sql 2000迁移到SQL 2005遇到的问题
    转:好用的抓取dump的工具ProcDump
    普通程序员回顾2010
    jQuery 结合 Json 提交数据到Webservice,并接收从Webservice返回的Json数据
    matplotlib 设置图形大小时 figsize 与 dpi 的关系
    Pandas 常见用法个人随笔
    python f.readlines() 会耗完所有内存
    推荐系统学习材料
    查看更多折叠动画(中间内容高度不确定)
    Entity Framework CodeFirst For Oracle
  • 原文地址:https://www.cnblogs.com/dsh2018/p/9289796.html
Copyright © 2020-2023  润新知