首先我们先把代码抄上,该实例一共有四个类,首先是CallBack.java:
package callbacktest;
public interface CallBack {
public void isSuccess();
}
接下来是实现了CallBack接口的曹操类,CaoCao.java:
package callbacktest;
public class CaoCao implements CallBack {
private GuanYu guanYu;
public CaoCao(GuanYu guanYu) {
this.guanYu = guanYu;
}
public void readyGo() {
// guanYu.zhanHuaXiong(this);
// System.out.println("二爷666,大家敬二爷一杯");
new Thread(new Runnable() {
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:
package callbacktest;
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();
}
}
最后是Main类:
package callbacktest;
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(this);
System.out.println("二爷666,大家敬二爷一杯");
// new Thread(new Runnable() {
// public void run() {
// guanYu.zhanHuaXiong(CaoCao.this);
// }
// }).start();
// System.out.println("各位放心,关二爷肯定能成,大家喝就完事了");
}
运行结果如下: