国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

callable和CompletionService接口試用

2019-11-15 00:32:36
字體:
來源:轉載
供稿:網友
callable和CompletionService接口試用

CompletionService接口定義為Interface CompletionService<V>接口定它在java7中只有一個實現ExecutorCompletionService,這個接口內部集成了一個BlockingQueue,因此可以實現對多線程運行結果的收集工作。為了更好的測試該接口,我使用了兩個測試,第一個測試是自己定義一個外部BlockingQueue來接收callable返回的數據。第二個測試是用CompletionService對executor進行裝飾,使得返回的CompletionService對象能直接submit任務。

但是我發現它submit的后并沒有馬上調用executor的submit,而是對它進行了封裝,因此出現了一點點延遲。如果在submit之后使用shutdown()命令結束的話,實際上該task可能還沒有 放到executor的taskpool中。所以這一點值得注意。

import java.util.Random;import java.util.concurrent.BlockingQueue;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.LinkedBlockingDeque;public class testCallable {    public static void main(String[] args) {        try {            futureCount();            completionServiceCount();        } catch (InterruptedException e) {            e.PRintStackTrace();        } catch (ExecutionException e) {            e.printStackTrace();        }    }    /**     * 使用自定義阻塞隊列得到任務執行結果     *      * @throws InterruptedException     * @throws ExecutionException     */    public static void futureCount() throws InterruptedException,            ExecutionException {        BlockingQueue<Future<Integer>> queue = new LinkedBlockingDeque<Future<Integer>>();        ExecutorService executorService = Executors.newCachedThreadPool();        int threadNum = 5;        for (int i = 0; i < threadNum; i++) {            Future<Integer> future = executorService.submit(getTask());            queue.put(future);        }        int sum = 0;        int temp = 0;        while(!queue.isEmpty()){            temp = queue.take().get();            sum += temp;            System.out.print(temp + "/t");        }        System.out.println("BlockingQueue all is : " + sum);        executorService.shutdown();    }    /**     * 使用completionService收集callable結果     * @throws ExecutionException      * @throws InterruptedException      */    public static void completionServiceCount() throws InterruptedException, ExecutionException {        ExecutorService executorService = Executors.newCachedThreadPool();        CompletionService<Integer> completionService = new ExecutorCompletionService<Integer>(                executorService);        int threadNum = 5;        for (int i = 0; i < threadNum; i++) {            completionService.submit(getTask());        }        int sum = 0;        int temp = 0;        for(int i=0;i<threadNum;i++){            temp = completionService.take().get();            sum += temp;            System.out.print(temp + "/t");        }        System.out.println("CompletionService all is : " + sum);        executorService.shutdown();    }    public static Callable<Integer> getTask() {        final Random rand = new Random();        Callable<Integer> task = new Callable<Integer>() {            @Override            public Integer call() throws Exception {                int num = 0;                for (int i = 0; i < 10; i++) {                    num = num + rand.nextInt(10);                }                return num;            }        };        return task;    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉川市| 吴川市| 洪洞县| 甘孜县| 兰坪| 石柱| 永宁县| 罗源县| 新疆| 松阳县| 夹江县| 江北区| 新源县| 彰化县| 富裕县| 肇源县| 鄂托克旗| 义马市| 孟州市| 邳州市| 白玉县| 锡林浩特市| 乌拉特中旗| 凤庆县| 南安市| 简阳市| 南宫市| 洛阳市| 工布江达县| 青神县| 红河县| 扶绥县| 玉树县| 高碑店市| 昌平区| 麻江县| 敖汉旗| 东阿县| 平谷区| 彩票| 诏安县|