回调:类 A 调用类 B 的方法,类 B 的方法执行完毕后主动调用类 A 的 callback() 方法
实例:小王叫小明去街上买东西,等小明东西买好后再主动通知小王
- 小王设定为 A 类,需要实现一个 CallBack 接口
- 小明设定为 B 类,有个 buy 的方法,支持同步和异步调用 ```java // 回调接口 public interface Callback { void ready(); }
// A类,即小王,有一个指使小明的方法和回调方法
public class A implements Callback {
public void order(B b) {
// 同步回调,传入自身
// 该方法会阻塞
b.syncBuy(this);
// 异步回调
// 该方法不会阻塞
b.asyncBuy(this);
}
@Override
public void ready() {
System.out.println("收到小明的通知,知道东西已经买好:" + LocalDateTime.now());
}
}
// B类,即小明,去买东西 public class B { public void buy(){ System.out.println(“小明开始行动…”); try { // 小明行动中 TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(“小明东西已经买好…”); }
// 同步调用
public void syncBuy(Callback callback) {
// 买东西的逻辑
this.buy();
// 回调方法通知
callback.ready();
}
// 异步回调
public void asyncBuy(Callback callback) {
new Thread(()->{
this.syncBuy(callback);
}).start();
}
}
// 测试 public class Main { public static void main(String[] args) { A a = new A(); B b = new B(); a.order(b); } } ``` java 实现回调机制的大概步骤:
- 定义回调接口 CallBack
- 类 A 实现回调接口 CallBack
- 类 B 中有方法 method(CallBack cb)
- A 调用 B 的 method() 方法,传入自身作为参数
- method() 方法执行完毕后,调用回调方法