java中的回调简单来说就是A类调了B类里面的C方法,结果是B类调了A类里面的D方法。其中D就是回调方法,它存在于接口中,由A实现。回调分为同步回调和异步回调。他们之间的区别在于返回结果是否需要等待,若有延迟则为异步回调,否则为同步回调。下面为代码示例:
public interface CSCallBack {//回调接口
public void process(String status);//回调方法
}
public class Client implements CSCallBack {//A类
private Server server;
public Client(Server server) {
this.server = server;
}
public void sendMsg(final String msg){
System.out.println("客户端:发送的消息为:" + msg);
//此处为异步回调,同步回调不需要新开线程进行
new Thread(new Runnable() {
@Override
public void run() {
Thread.sleep(2000);
//相当于A类调了B类里面的C方法
server.getClientMsg(Client.this,msg);
}
}).start();
System.out.println("客户端:异步发送成功");
}
@Override
public void process(String status) {//D方法,回调方法
System.out.println("客户端:服务端回调状态为:" + status);
}
}
public class Server {//B类
public void getClientMsg(CSCallBack csCallBack , String msg) {
System.out.println("服务端:服务端接收到客户端发送的消息为:" + msg);
// 模拟服务端需要对数据处理
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("服务端:数据处理成功,返回成功状态 200");
String status = "200";
csCallBack.process(status);//相当于B类调了A类里面的D方法
}
}