<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Chan Chen Coding...

    Runnable Callable Future and Executor in Java

    Refer to: http://blog.csdn.net/zhangzhaokun/article/details/6615454

    Executor就是Runnable和Callable的調(diào)度容器,F(xiàn)uture就是對(duì)于具體的調(diào)度任務(wù)的執(zhí)行結(jié)果進(jìn)行查看,最為關(guān)鍵的是Future可以檢查對(duì)應(yīng)的任務(wù)是否已經(jīng)完成,也可以阻塞在get方法上一直等待任務(wù)返回結(jié)果。Runnable和Callable的差別就是Runnable是沒(méi)有結(jié)果可以返回的,就算是通過(guò)Future也看不到任務(wù)調(diào)度的結(jié)果的。 

    package com.future.demo;

    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;

    public class RunnableAndCallable2Future {
        public static void main(String[] args) {

            // 創(chuàng)建一個(gè)執(zhí)行任務(wù)的服務(wù)
            ExecutorService executor = Executors.newFixedThreadPool(3);
            try {
                // 1.Runnable通過(guò)Future返回結(jié)果為空
                
    // 創(chuàng)建一個(gè)Runnable,來(lái)調(diào)度,等待任務(wù)執(zhí)行完畢,取得返回結(jié)果
                Future<?> runnable1 = executor.submit(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println("runnable1 running.");
                    }
                });
                System.out.println("Runnable1:" + runnable1.get());

                // 2.Callable通過(guò)Future能返回結(jié)果
                
    // 提交并執(zhí)行任務(wù),任務(wù)啟動(dòng)時(shí)返回了一個(gè) Future對(duì)象,
                
    // 如果想得到任務(wù)執(zhí)行的結(jié)果或者是異常可對(duì)這個(gè)Future對(duì)象進(jìn)行操作
                Future<String> future1 = executor.submit(new Callable<String>() {
                    @Override
                    public String call() throws Exception {
                        // TODO Auto-generated method stub
                        return "result=task1";
                    }
                });
                // 獲得任務(wù)的結(jié)果,如果調(diào)用get方法,當(dāng)前線程會(huì)等待任務(wù)執(zhí)行完畢后才往下執(zhí)行
                System.out.println("task1: " + future1.get());

                // 3. 對(duì)Callable調(diào)用cancel可以對(duì)對(duì)該任務(wù)進(jìn)行中斷
                
    // 提交并執(zhí)行任務(wù),任務(wù)啟動(dòng)時(shí)返回了一個(gè) Future對(duì)象,
                
    // 如果想得到任務(wù)執(zhí)行的結(jié)果或者是異常可對(duì)這個(gè)Future對(duì)象進(jìn)行操作
                Future<String> future2 = executor.submit(new Callable<String>() {
                    @Override
                    public String call() throws Exception {
                        try {
                            while (true) {
                                System.out.println("task2 running.");
                                Thread.sleep(50);
                            }
                        } catch (InterruptedException e) {
                            System.out.println("Interrupted task2.");
                        }
                        return "task2=false";
                    }
                });

                // 等待5秒后,再停止第二個(gè)任務(wù)。因?yàn)榈诙€(gè)任務(wù)進(jìn)行的是無(wú)限循環(huán)
                Thread.sleep(10);
                System.out.println("task2 cancel: " + future2.cancel(true));

                // 4.用Callable時(shí)拋出異常則Future什么也取不到了
                
    // 獲取第三個(gè)任務(wù)的輸出,因?yàn)閳?zhí)行第三個(gè)任務(wù)會(huì)引起異常
                
    // 所以下面的語(yǔ)句將引起異常的拋出
                Future<String> future3 = executor.submit(new Callable<String>() {

                    @Override
                    public String call() throws Exception {
                        throw new Exception("task3 throw exception!");
                    }

                });
                System.out.println("task3: " + future3.get());
            } catch (Exception e) {
                System.out.println(e.toString());
            }
            // 停止任務(wù)執(zhí)行服務(wù)
            executor.shutdownNow();
        }

    }


    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2012-11-26 11:59 Chan Chen 閱讀(362) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Scala / Java

    主站蜘蛛池模板: 特级淫片国产免费高清视频| 曰韩亚洲av人人夜夜澡人人爽| 国产一级高清免费观看| 久久精品视频亚洲| 国产亚洲蜜芽精品久久| 精品无码无人网站免费视频| 男人的天堂亚洲一区二区三区| 亚洲国产成人一区二区三区| yy一级毛片免费视频| 国产一级淫片a免费播放口之| 久久久免费观成人影院| 国产一区二区三区免费视频| 好紧我太爽了视频免费国产 | 国产精品久久免费视频| 久久精品亚洲日本波多野结衣| 成年黄网站色大免费全看| 久久久久亚洲精品天堂| 无码囯产精品一区二区免费 | 久久精品国产亚洲av麻豆色欲 | 日韩成人在线免费视频| 女bbbbxxxx另类亚洲| 亚洲一区二区影院| 国产亚洲精品激情都市| 中文字幕久无码免费久久| 国产亚洲精品一品区99热| 免费毛片a线观看| 爱情岛论坛免费视频| 亚洲综合色成在线播放| 老司机精品免费视频| 亚洲人成电影网站免费| 免费看片免费播放| 18禁止看的免费污网站| 中日韩亚洲人成无码网站| 日本无卡码免费一区二区三区| 久久这里只精品99re免费| 亚洲明星合成图综合区在线| 成人爽A毛片免费看| 精品久久久久亚洲| 在线aⅴ亚洲中文字幕| AV在线亚洲男人的天堂| 免费看又爽又黄禁片视频1000|