java 异步回调 详解

杨老师要粉刷墙壁,但是又不想请人工,所以叫上她的学生去帮她粉刷 叫学生拿着钥匙去刷墙,刷完之后告诉她结果

1,老师与学生之间的联系方式:callback接口

2,老师必须实现callback接口,这样,学生才能通过这个联系方式找到老师

3,老师要拿到学生的引用,这样就可以帮学生注册回调接口

4,学生必须知道联系方式,也就是必须传入callback接口作为入参,另外,还必须知道老师安排的任务是什么,所以任务也作为入参

来人哪~上代码!

嗻~~~~~

1,callback接口

public interface Callback {
     void process(String result);
}

2,老师类

public class TeacherYang implements Callback {

    private StudentHe studentHe;

    public TeacherYang(StudentHe studentHe){
        this.studentHe = studentHe;
    }

    public void shuaQiang(final String houseLocation){
     System.out.println("杨老师发给何同学要刷的墙屋位置,位置是:" + houseLocation);

     new Thread(new Runnable() {
         @Override
         public void run()   {
//此处注册回调函数,用callback函数的实现TeacherYang.this注册 studentHe.getHouseLocation(TeacherYang.
this,houseLocation); } }).start(); System.out.println("何同学已经收到老师发送的位置,准备开刷!"); } @Override public void process(String result) { try{ Thread.sleep(5*1000); }catch (InterruptedException e){ e.printStackTrace(); } System.out.println("杨老师在家喝茶...收到何同学发来的信息:" + result + ",杨老师满足的笑了,心想:又省了好些钱..."); } }

3,学生类

public class StudentHe {

    public void getHouseLocation(Callback callback,String houseLocation){
       System.out.println("何同学已经收到老师发送的位置,位置是:" + houseLocation + "----->开始工作了!");

       try{
           Thread.sleep(10*1000);
       }catch (InterruptedException e){
           e.printStackTrace();
       }
       System.out.println("刷了3个小时,累的跟条狗一样,何同学终于刷完了!");
       String status = "'老师墙刷完了,可以住了!'";
       callback.process(status);
    }

}

4,测试类

public class CallBackTest {
    public static void main(String[] args) {
        StudentHe studentHe = new StudentHe();
        TeacherYang teacherYang = new TeacherYang(studentHe);
        teacherYang.shuaQiang("湖南大学家属院");
    }
}

5,结果

杨老师发给何同学要刷的墙屋位置,位置是:湖南大学家属院
何同学已经收到老师发送的位置,位置是:湖南大学家属院----->开始工作了!
何同学已经收到老师发送的位置,准备开刷!
刷了3个小时,累的跟条狗一样,何同学终于刷完了!
杨老师在家喝茶...收到何同学发来的信息:'老师墙刷完了,可以住了!',杨老师满足的笑了,心想:又省了好些钱...

猜你喜欢

转载自www.cnblogs.com/mmh760/p/10950325.html