真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用CompletionService結(jié)合ExecutorService批處理任務

CompletionService用于提交一組Callable任務,其take方法返回已完成的一個Callable任務對應的Future對象。

創(chuàng)新互聯(lián)建站主營江西網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā),江西h5微信小程序開發(fā)搭建,江西網(wǎng)站營銷推廣歡迎江西等地區(qū)企業(yè)咨詢

如果你向Executor提交了一個批處理任務,并且希望在它們完成后獲得結(jié)果。為此你可以將每個任務的Future保存進一個集合,然后循環(huán)這個集合調(diào)用Future的get()取出數(shù)據(jù)。幸運的是CompletionService幫你做了這件事情。

CompletionService整合了Executor和BlockingQueue的功能。你可以將Callable任務提交給它去執(zhí)行,然后使用類似于隊列中的take和poll方法,在結(jié)果完整可用時獲得這個結(jié)果,像一個打包的Future。

CompletionService的take返回的future是哪個先完成就先返回哪一個,而不是根據(jù)提交順序。

例子:

使用CompletionService結(jié)合ExecutorService批處理任務

 1 import java.util.Random; 2 import java.util.concurrent.Callable; 3 import java.util.concurrent.CompletionService; 4 import java.util.concurrent.ExecutionException; 5 import java.util.concurrent.ExecutorCompletionService; 6 import java.util.concurrent.ExecutorService; 7 import java.util.concurrent.Executors; 8   9 public class CallableAndFuture {10  11         public static void main(String[] args) {12               ExecutorService threadPool = Executors. newFixedThreadPool(10);13               CompletionService completionService = new ExecutorCompletionService(threadPool);14  15                for (int i = 0; i < 10; i++) {16                       final int seq = i;17                      System. out.println("開始提交第" + seq + "個任務");18                      completionService.submit( new Callable() {19  20                             @Override21                             public Integer call() throws Exception {22                                   Thread. sleep(new Random().nextInt(5000));23                                    return seq;24                            }25                      });26               }27  28                for (int i = 0; i < 10; i++) {29                       try {30                             // 取出并移除表示下一個已完成任務的 Future,如果目前不存在這樣的任務,則等待。31                            Integer seq = completionService.take().get();32                            System. out.println("第" + seq + "個任務返回");33                      } catch (InterruptedException e) {34                            e.printStackTrace();35                      } catch (ExecutionException e) {36                            e.printStackTrace();37                      }38               }39        }40  41 }

使用CompletionService結(jié)合ExecutorService批處理任務

 


文章標題:使用CompletionService結(jié)合ExecutorService批處理任務
網(wǎng)站地址:http://weahome.cn/article/gggdjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部