久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

Java基礎9:解讀Java回調機制

更多內容請關注微信公眾號【Java技術江湖】

景泰網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設公司等網站項目制作,到程序開發,運營維護。創新互聯于2013年創立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯。

這是一位阿里 Java 工程師的技術小站,作者黃小斜,專注 Java 相關技術:SSM、SpringBoot、MySQL、分布式、中間件、集群、Linux、網絡、多線程,偶爾講點Docker、ELK,同時也分享技術干貨和學習經驗,致力于Java全棧開發!(關注公眾號后回復”資料“即可領取 3T 免費技術學習資源以及我我原創的程序員校招指南、Java學習指南等資源)

Java基礎9:解讀Java回調機制cdn.xitu.io/2019/4/6/169f1735fd0d1d16?w=900&h=500&f=jpeg&s=109856">

本文主要介紹了Java中的回調機制,以及Java多線程中類似回調的機制。

具體代碼在我的GitHub中可以找到

https://github.com/h3pl/MyTech

文章首發于我的個人博客:

https://h3pl.github.io/2018/04/26/javase9

更多關于Java后端學習的內容請到我的CSDN博客上查看: https://blog.csdn.net/a724888

模塊間的調用

本部分摘自https://www.cnblogs.com/xrq730/p/6424471.html

在一個應用系統中,無論使用何種語言開發,必然存在模塊之間的調用,調用的方式分為幾種:

(1)同步調用

同步調用是最基本并且最簡單的一種調用方式,類A的方法a()調用類B的方法b(),一直等待b()方法執行完畢,a()方法繼續往下走。這種調用方式適用于方法b()執行時間不長的情況,因為b()方法執行時間一長或者直接阻塞的話,a()方法的余下代碼是無法執行下去的,這樣會造成整個流程的阻塞。

Java基礎9:解讀Java回調機制

(2)異步調用

Java基礎9:解讀Java回調機制

異步調用是為了解決同步調用可能出現阻塞,導致整個流程卡住而產生的一種調用方式。類A的方法方法a()通過新起線程的方式調用類B的方法b(),代碼接著直接往下執行,這樣無論方法b()執行時間多久,都不會阻塞住方法a()的執行。

但是這種方式,由于方法a()不等待方法b()的執行完成,在方法a()需要方法b()執行結果的情況下(視具體業務而定,有些業務比如啟異步線程發個微信通知、刷新一個緩存這種就沒必要),必須通過一定的方式對方法b()的執行結果進行監聽。

在Java中,可以使用Future+Callable的方式做到這一點,具體做法可以參見我的這篇文章Java多線程21:多線程下其他組件之CyclicBarrier、Callable、Future和FutureTask。

(3)回調

Java基礎9:解讀Java回調機制

最后是回調,回調的思想是:

類A的a()方法調用類B的b()方法 類B的b()方法執行完畢主動調用類A的callback()方法 這樣一種調用方式組成了上圖,也就是一種雙向的調用方式。

回調實例:Tom做題

數學老師讓Tom做一道題,并且Tom做題期間數學老師不用盯著Tom,而是在玩手機,等Tom把題目做完后再把答案告訴老師。

1 數學老師需要Tom的一個引用,然后才能將題目發給Tom。

2 數學老師需要提供一個方法以便Tom做完題目以后能夠將答案告訴他。

3 Tom需要數學老師的一個引用,以便Tom把答案給這位老師,而不是隔壁的體育老師。

回調接口,可以理解為老師接口

    //回調指的是A調用B來做一件事,B做完以后將結果告訴給A,這期間A可以做別的事情。
    //這個接口中有一個方法,意為B做完題目后告訴A時使用的方法。
    //所以我們必須提供這個接口以便讓B來回調。
    //回調接口,
    public interface CallBack {
        void tellAnswer(int res);
    }

數學老師類

    //老師類實例化回調接口,即學生寫完題目之后通過老師的提供的方法進行回調。
    //那么學生如何調用到老師的方法呢,只要在學生類的方法中傳入老師的引用即可。
    //而老師需要指定學生答題,所以也要傳入學生的實例。
public class Teacher implements CallBack{
    private Student student;
    Teacher(Student student) {
        this.student = student;
    }
    void askProblem (Student student, Teacher teacher) {
        //main方法是主線程運行,為了實現異步回調,這里開啟一個線程來操作
        new Thread(new Runnable() {
            @Override
            public void run() {
                student.resolveProblem(teacher);
            }
        }).start();
        //老師讓學生做題以后,等待學生回答的這段時間,可以做別的事,比如玩手機.\
        //而不需要同步等待,這就是回調的好處。
        //當然你可以說開啟一個線程讓學生做題就行了,但是這樣無法讓學生通知老師。
        //需要另外的機制去實現通知過程。
        // 當然,多線程中的future和callable也可以實現數據獲取的功能。
        for (int i = 1;i < 4;i ++) {
            System.out.println("等學生回答問題的時候老師玩了 " + i + "秒的手機");
        }
    }
    @Override
    public void tellAnswer(int res) {
        System.out.println("the answer is " + res);
    }
}

學生接口

    //學生的接口,解決問題的方法中要傳入老師的引用,否則無法完成對具體實例的回調。
    //寫為接口的好處就是,很多個學生都可以實現這個接口,并且老師在提問題時可以通過
    //傳入List<Student>來聚合學生,十分方便。
public interface Student {
    void resolveProblem (Teacher teacher);
}

學生Tom

public class Tom implements Student{
    @Override
    public void resolveProblem(Teacher teacher) {
        try {
            //學生思考了3秒后得到了答案,通過老師提供的回調方法告訴老師。
            Thread.sleep(3000);
            System.out.println("work out");
            teacher.tellAnswer(111);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

測試類

public class Test {
    public static void main(String[] args) {
        //測試
        Student tom = new Tom();
        Teacher lee = new Teacher(tom);
        lee.askProblem(tom, lee);
        //結果
//        等學生回答問題的時候老師玩了 1秒的手機
//        等學生回答問題的時候老師玩了 2秒的手機
//        等學生回答問題的時候老師玩了 3秒的手機
//        work out
//        the answer is 111
    }
}

多線程中的“回調”

Java多線程中可以通過callable和future或futuretask結合來獲取線程執行后的返回值。實現方法是通過get方法來調用callable的call方法獲取返回值。

其實這種方法本質上不是回調,回調要求的是任務完成以后被調用者主動回調調用者的接口。而這里是調用者主動使用get方法阻塞獲取返回值。

public class 多線程中的回調 {
    //這里簡單地使用future和callable實現了線程執行完后
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newCachedThreadPool();
        Future<String> future = executor.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                System.out.println("call");
                TimeUnit.SECONDS.sleep(1);
                return "str";
            }
        });
        //手動阻塞調用get通過call方法獲得返回值。
        System.out.println(future.get());
        //需要手動關閉,不然線程池的線程會繼續執行。
        executor.shutdown();
    //使用futuretask同時作為線程執行單元和數據請求單元。
    FutureTask<Integer> futureTask = new FutureTask(new Callable<Integer>() {
        @Override
        public Integer call() throws Exception {
            System.out.println("dasds");
            return new Random().nextInt();
        }
    });
    new Thread(futureTask).start();
    //阻塞獲取返回值
    System.out.println(futureTask.get());
}
@Test
public void test () {
    Callable callable = new Callable() {
        @Override
        public Object call() throws Exception {
            return null;
        }
    };
    FutureTask futureTask = new FutureTask(callable);
}
}

網站題目:Java基礎9:解讀Java回調機制
文章源于:http://www.js-pz168.com/article48/jipohp.html

成都網站建設公司_創新互聯,為您提供App設計網站收錄品牌網站制作App開發面包屑導航網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
国产精品一区在线观看乱码| 国产精品免费观看高清| 韩日午夜在线资源一区二区| 中文字幕精品一区日韩| 日韩欧美一区中文| 亚洲天堂精品视频| 精品一区二区三区免费视频| 97超碰人人看人人 | 久久久久久国产精品免费免费| 亚洲制服欧美久久| 精品久久久久久亚洲综合网 | 久久综合色一综合色88| 亚洲一区二区精品视频| 国产成人av影院| 免费av在线一区二区| 欧美挠脚心视频网站| 日本一区二区三区国色天香| 欧美aaa在线| 成人av免费电影| 欧美午夜精品电影| 日韩一区在线免费观看| 极品美女销魂一区二区三区| 好看的日韩精品视频在线| 欧美日韩精品一区二区在线播放| 天堂va久久久噜噜噜久久va| 欧美一区二区高清| 一区二区三区四区亚洲| 成人蜜臀av电影| 亚洲午夜久久久影院伊人| 久久久99精品免费观看| 免费在线观看不卡| 国内外成人免费视频| 777久久久精品| 亚洲国产精品影院| 91啪亚洲精品| 欧美日韩在线播| 一区二区三区在线观看欧美| yourporn久久国产精品| 色诱视频网站一区| 中文字幕视频一区| 粉嫩av亚洲一区二区图片| 亚洲一区二区三区精品在线观看 | 翡翠波斯猫1977年美国| 欧美精品1区2区| 亚洲成人激情社区| 国产精品视频一区二区三区经| 欧美另类久久久品| 亚洲最新视频在线观看| 99三级在线| 欧美一区二区三区在线观看视频| 香蕉影视欧美成人| 国产精品制服诱惑| 精品剧情v国产在线观看在线| 人禽交欧美网站| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 欧美tk丨vk视频| 青娱乐精品视频| 欧美裸体网站| 国产亚洲成av人在线观看导航| 国产在线精品国自产拍免费| 亚洲一区二区精品在线观看| 日韩一区欧美一区| 91色综合久久久久婷婷| 制服丝袜在线91| 日本不卡123| 水蜜桃一区二区| 中文字幕在线视频一区| 99国产一区二区三精品乱码| 欧美高清视频一二三区| 奇米影视一区二区三区小说| 日本在线视频不卡| 亚洲视频一二三| 成人国产一区二区| www国产精品av| 高清不卡一区二区在线| 欧美日韩成人综合在线一区二区| 偷偷要91色婷婷| 日韩一本精品| 亚洲精品五月天| 天天操天天色综合| 美女一区视频| 国产精品高潮呻吟久久| 2019国产精品视频| 精品国产髙清在线看国产毛片| 国产高清精品在线| 欧美精品一级二级三级| 精品在线播放免费| 欧美在线播放高清精品| 日本美女一区二区三区视频| 亚洲人成网站在线观看播放 | 欧美tickling挠脚心丨vk| 国产精品一区一区三区| 欧美日韩一级视频| 久久99热国产| 欧美熟乱第一页| 久久成人久久爱| 欧美三片在线视频观看| 久久91精品久久久久久秒播| 欧美伊人精品成人久久综合97| 日韩综合小视频| 色综合久久久久综合体| 人人超碰91尤物精品国产| 色视频一区二区| 美女视频黄 久久| 91国在线观看| 精品在线亚洲视频| 欧美理论在线播放| 激情综合五月婷婷| 欧美一区2区视频在线观看| 国产精品夜夜爽| 欧美大片在线观看| 99久久精品国产观看| 久久久久久夜精品精品免费| 99re视频在线观看| 国产精品对白交换视频| 久久久99爱| 亚洲无人区一区| 色哟哟国产精品免费观看| 蜜桃av一区二区在线观看| 欧美日韩在线直播| 国产成人三级在线观看| www一区二区| 国产精品swag| 亚洲女同女同女同女同女同69| 日韩精品另类天天更新| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲少妇最新在线视频| 欧美三级华人主播| 午夜不卡av在线| 91福利在线导航| 国产精品一区二区久激情瑜伽| 日韩欧美国产系列| av观看久久| 亚洲视频一区二区在线观看| 天堂社区 天堂综合网 天堂资源最新版| 天堂在线一区二区| 欧美日韩视频一区二区| 懂色av一区二区三区蜜臀| 久久精品综合网| 久久免费视频1| 午夜久久久久久久久| 欧美视频完全免费看| 成人黄色小视频在线观看| 中文字幕成人网| 日韩欧美亚洲在线| 老司机午夜精品99久久| 日韩亚洲欧美成人一区| 成人免费视频网站入口| 亚洲午夜在线观看视频在线| 在线亚洲一区观看| 成人久久18免费网站麻豆| 国产精品人人做人人爽人人添| 日韩在线电影一区| 国内精品视频666| 久久久精品中文字幕麻豆发布| 久久久久久欧美精品色一二三四 | 免费在线观看一区| 日韩欧美不卡在线观看视频| 精品国产免费久久久久久尖叫| 亚洲国产wwwccc36天堂| 欧美日韩一区二区三区高清 | 日韩激情视频网站| 欧美一级爆毛片| 精品乱码一区二区三区| 日韩电影在线免费看| 精品久久五月天| 日本一区二区三区视频免费看 | 色综合天天综合在线视频| 国产99久久久国产精品免费看 | 视频一区二区国产| 欧美tk丨vk视频| 日韩av一区二区三区在线| 精品一区二区免费| 欧美国产日韩精品免费观看| 亚洲丰满在线| 成人高清免费观看| 一区二区三区蜜桃| 欧美肥妇bbw| 久久99欧美| 国产一区二区成人久久免费影院| 国产精品色在线观看| 日本韩国欧美在线| 91嫩草国产在线观看| 日韩中文字幕区一区有砖一区| 欧美成人综合网站| 色综合电影网| 成人黄色在线网站| 午夜欧美大尺度福利影院在线看 | 成人激情午夜影院| 亚洲午夜激情网页| 精品国产91久久久久久久妲己| 日韩videos| 国产白丝网站精品污在线入口| 亚洲人成亚洲人成在线观看图片| 欧美日韩国产影片| 美女被啪啪一区二区| 福利一区二区在线| 午夜精品一区二区三区三上悠亚| 精品国产乱码91久久久久久网站| 亚洲一一在线|