<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

    主站蜘蛛池模板: 最近免费中文字幕MV在线视频3| 亚洲Aⅴ在线无码播放毛片一线天| A毛片毛片看免费| 亚洲视频人成在线播放| 免费看美女午夜大片| 亚洲精品线路一在线观看| 一级一级一片免费高清| 亚洲日韩国产精品乱| 狠狠躁狠狠爱免费视频无码| 亚洲中文久久精品无码ww16| 日韩a级无码免费视频| 久久精品国产亚洲| 2021精品国产品免费观看| 亚洲区视频在线观看| 成人毛片18女人毛片免费视频未| 亚洲av无码专区国产不乱码| 国产一级理论免费版| 国产精品成人69XXX免费视频| 永久亚洲成a人片777777| 午夜视频免费在线观看| 亚洲手机中文字幕| 成年美女黄网站18禁免费| 国产在亚洲线视频观看| 国产亚洲精品岁国产微拍精品| 美女视频黄的免费视频网页| 亚洲无限乱码一二三四区| 国产国产人免费人成免费视频 | 亚洲天堂一区二区三区四区| 成人免费毛片内射美女APP| 无忧传媒视频免费观看入口| 自拍偷自拍亚洲精品第1页| 99re视频精品全部免费| 亚洲国产精品精华液| 亚洲色精品vr一区二区三区| 最近免费视频中文字幕大全| 亚洲色一区二区三区四区| 不卡精品国产_亚洲人成在线| 人妻丰满熟妇无码区免费| 亚洲第一街区偷拍街拍| 亚洲狠狠婷婷综合久久久久 | 最近免费中文字幕大全免费版视频 |