CompletionService用于提交一組Callable任務(wù),其take方法返回已完成的一個(gè)Callable任務(wù)對(duì)應(yīng)的Future對(duì)象。
創(chuàng)新互聯(lián)建站主營(yíng)江西網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),江西h5微信小程序開(kāi)發(fā)搭建,江西網(wǎng)站營(yíng)銷(xiāo)推廣歡迎江西等地區(qū)企業(yè)咨詢
如果你向Executor提交了一個(gè)批處理任務(wù),并且希望在它們完成后獲得結(jié)果。為此你可以將每個(gè)任務(wù)的Future保存進(jìn)一個(gè)集合,然后循環(huán)這個(gè)集合調(diào)用Future的get()取出數(shù)據(jù)。幸運(yùn)的是CompletionService幫你做了這件事情。
CompletionService整合了Executor和BlockingQueue的功能。你可以將Callable任務(wù)提交給它去執(zhí)行,然后使用類(lèi)似于隊(duì)列中的take和poll方法,在結(jié)果完整可用時(shí)獲得這個(gè)結(jié)果,像一個(gè)打包的Future。
CompletionService的take返回的future是哪個(gè)先完成就先返回哪一個(gè),而不是根據(jù)提交順序。
例子:
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<Integer> completionService = new ExecutorCompletionService<Integer>(threadPool);14 15 for (int i = 0; i < 10; i++) {16 final int seq = i;17 System. out.println("開(kāi)始提交第" + seq + "個(gè)任務(wù)");18 completionService.submit( new Callable<Integer>() {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 // 取出并移除表示下一個(gè)已完成任務(wù)的 Future,如果目前不存在這樣的任務(wù),則等待。31 Integer seq = completionService.take().get();32 System. out.println("第" + seq + "個(gè)任務(wù)返回");33 } catch (InterruptedException e) {34 e.printStackTrace();35 } catch (ExecutionException e) {36 e.printStackTrace();37 }38 }39 }40 41 }
分享名稱:使用CompletionService結(jié)合ExecutorService批處理任務(wù)
新聞來(lái)源:http://jinyejixie.com/article22/gggdjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、定制開(kāi)發(fā)、外貿(mào)建站、網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站改版、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)