多线程--future模式初体验

第一次使用多线程,虽然理解的不是很透彻,但是也值得记录下。用的是future模式。 创建个线程池: private ExecutorService cachedThreadPool = Executors.newFixedThreadPool(200,new SiyueThreadFactory("test_task")); 创建任务列表futureTaskList
taskList是业务内容,它的长度是线程数,也是循环次数。
List<Future<Map<String,Object>>> futureTaskList = Lists.newArrayListWithCapacity(taskList.size()); for(String task : taskList) {
         
          futureTaskList.add(cachedThreadPool.submit(new Callable<Map<String,Object>>(){
         
              @Override             public Map<String,Object> call() throws Exception {
         
                  //task相关业务                 ...                 return map;             }         })); } 等待返回结果,用future.get()获取结果。
List<Map<String,Object>> AllDataList = new ArrayList<>(); for(Future<Map<String,Object>> future : futureTaskList){
         
          try {
         
              AllDataList.add(future.get());         } catch (ExecutionException | InterruptedException e) {
         
              e.printStackTrace();         } } 关闭线程池
try {
         
      // 通知     cachedThreadPool.shutdown();     // (所有的任务都结束的时候,返回TRUE)     if(!cachedThreadPool.awaitTermination(awaitTime, TimeUnit.MILLISECONDS)){
         
          // 超时的时候向线程池中所有的线程发出中断(interrupted)。         cachedThreadPool.shutdownNow();     } } catch (InterruptedException e) {
         
      // awaitTermination方法被中断的时候也中止线程池中全部的线程的执行。     System.out.println("awaitTermination interrupted: " + e);     cachedThreadPool.shutdownNow(); }
第一次使用多线程,虽然理解的不是很透彻,但是也值得记录下。用的是future模式。 创建个线程池: private ExecutorService cachedThreadPool = Executors.newFixedThreadPool(200,new SiyueThreadFactory("test_task")); 创建任务列表futureTaskList taskList是业务内容,它的长度是线程数,也是循环次数。 List >> futureTaskList = Lists.newArrayListWithCapacity(taskList.size()); for(String task : taskList) { futureTaskList.add(cachedThreadPool.submit(new Callable >(){ @Override public Map call() throws Exception { //task相关业务 ... return map; } })); } 等待返回结果,用future.get()获取结果。 List > AllDataList = new ArrayList<>(); for(Future > future : futureTaskList){ try { AllDataList.add(future.get()); } catch (ExecutionException | InterruptedException e) { e.printStackTrace(); } } 关闭线程池 try { // 通知 cachedThreadPool.shutdown(); // (所有的任务都结束的时候,返回TRUE) if(!cachedThreadPool.awaitTermination(awaitTime, TimeUnit.MILLISECONDS)){ // 超时的时候向线程池中所有的线程发出中断(interrupted)。 cachedThreadPool.shutdownNow(); } } catch (InterruptedException e) { // awaitTermination方法被中断的时候也中止线程池中全部的线程的执行。 System.out.println("awaitTermination interrupted: " + e); cachedThreadPool.shutdownNow(); }
经验分享 程序员 微信小程序 职场和发展