多線程分段遍曆集合list(spring 線程池),listspring

來源:互聯網
上載者:User

多線程分段遍曆集合list(spring 線程池),listspring

基於Spring 的ThreadPoolTaskExecutor 線程池分段遍曆讀取集合list

代碼如下所示:

1、定義線程池

<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!--初始線程池大小--> <property name="corePoolSize" value="10"/> <!--最大線程池大小--> <property name="maxPoolSize" value="30"/> </bean> 

2、主線程代碼

@Autowired  public  ThreadPoolTaskExecutor threadPoolTaskExecutor;    private void doReadList() throws InterruptedException, ExecutionException{      /**初始化集合**/      List<String> list = new ArrayList<String>();      for(int i=0;i<100;i++){          list.add("test--"+i);      }            /**接收集合各段的 執行的返回結果**/      List<Future<Boolean>> futureList = new ArrayList<Future<Boolean>>();            /**集合總條數**/      int size = list.size();      /**將集合切分的段數**/      int sunSum = 10;      int listStart,listEnd;      /***當總條數不足10條時 用總條數 當做線程切分值**/      if(sunSum > size){          sunSum = size;      }      /**定義子線程**/      SunCallable sunCallable ;      /**將list 切分10份 多線程執行**/      for (int i = 0; i < sunSum; i++) {          /***計算切割  開始和結束**/          listStart = size / sunSum * i ;          listEnd = size / sunSum * ( i + 1 );          /**最後一段線程會 出現與其他線程不等的情況**/          if(i == sunSum - 1){              listEnd = size;          }          /**線程切斷**/          List<String> sunList = list.subList(listStart,listEnd);           /**子線程初始化**/          sunCallable = new SunCallable(i,sunList);          /***多線程執行***/          futureList.add(taskExecutor.submit(sunCallable));      }      /**對各個線程段結果進行解析**/      for(Future<Boolean> future : futureList){          if(null != future && future.get()){              System.err.println("成功");          }else{              System.err.println("失敗");          }      }  }  

 

3 子線程SunCallable代碼:

package  xxx.xxx.xxx.xx;    import java.util.List;  import java.util.concurrent.Callable;  public class SunCallable implements Callable<Boolean> {            /**當前是屬於第幾段線程**/      private int pageIndex;            private List<String> list;             public SunCallable(int pageIndex,List<String> list){          this.pageIndex = pageIndex;          this.list = list;      }             @Override      public Boolean call() throws Exception {                  System.err.println(String.format("pageIndex:%s size:%s",pageIndex,list.size()));          Boolean result = Boolean.TRUE;          if(null != list && list.size() >0){              for(String str: list){                  try {                       //TODO 業務處理                  } catch (Exception e) {                      result = Boolean.FALSE;;                                         }              }          }          return result;      }  }  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.