zoukankan      html  css  js  c++  java
  • 多线程的应用

    实例说明,有一个庞大的实例的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理解不深,菜~~)。涉及不到这的可以忽略
    
    
    
    
  • 相关阅读:
    洛谷 P5249 [LnOI2019]加特林轮盘赌 概率DP
    c++提高学习笔记——05-c++STLday10
    c++基础学习笔记——04-c++day09
    c++基础学习笔记——04-c++day08
    c++基础学习笔记——04-c++day07
    c++基础学习笔记——04-c++day06
    c++基础学习笔记——04-c++day05
    c++基础学习笔记——04-c++day04
    c++基础学习笔记——04-c++day03
    c++基础学习笔记——04-c++day02
  • 原文地址:https://www.cnblogs.com/dsh2018/p/9289796.html
Copyright © 2011-2022 走看看