首先这里直接贴代码, 有四个类
-
CallBack.java类
public interface CallBack { public void isSuccess(); }
-
接下来是实现了CallBack接口的曹操类
CaoCao.java
public class Caocao implements CallBack { private GuanYu guanYu; public Caocao(GuanYu guanYu) { this.guanYu = guanYu; } public void readyGo() { new Thread(new Runnable() { @Override public void run() { guanYu.zhanhuaxiong(Caocao.this); } }).start(); System.out.println("各位放心,关二爷肯定能成,大家喝就完事了"); } @Override public void isSuccess() { if (guanYu.isSha()) { System.out.println("曹操知道成了"); } else { System.out.println("不可能"); } } }
-
然后是关羽类
GuanYu.java
public class GuanYu { private boolean sha = false; public boolean isSha() { return sha; } public void setSha(boolean sha) { this.sha = sha; } public void zhanhuaxiong(CallBack callBack) { System.out.println("瞬间秒杀,回营"); sha = true; try { Thread.sleep(1000);//去了就斩了,但是需要时间回营地报信 } catch (InterruptedException e) { e.printStackTrace(); } callBack.isSuccess(); } }
-
用户测试的
MainTest.java
类public class MainTest { public static void main(String[] args) { Caocao caocao = new Caocao(new GuanYu()); caocao.readyGo(); } }
-
首先说一下啥是回调吧,其实很简单,就是A类的a方法调用了B类的b方法,而b方法中又会调用A类中的c方法。CaoCao类就是上边的A类,在CaoCao类中的readyGo方法中调用了GuanYu类中的zhanHuaXiong方法,然后zhanHuaXiong方法又调用了CaoCao类的isSuccess方法。
需要注意的是,我们在readyGo方法中是新创建了一个thread,然后在这个线程中去调用zhanHuaXiong方法,也就是所谓的异步回调,这样写的话运行结果如下:
-
把readyGo方法改成如下就变成了同步回调:
public void readyGo() { guanYu.zhanhuaxiong(Caocao.this); System.out.println("二爷66666,大家敬二爷一杯"); // new Thread(new Runnable() { // @Override // public void run() { // guanYu.zhanhuaxiong(Caocao.this); // } // }).start(); // System.out.println("各位放心,关二爷肯定能成,大家喝就完事了"); }
运行结果如下: