java回调原理 this_【java回调】同步/异步回调机制的原理和使用方法

回调(callback)在我们做工程过程中经常会使用到,今天想整理一下回调的原理和使用方法。

回调的原理可以简单理解为:A发送消息给B,B处理完后告诉A处理结果。再简单点就是A调用B,B调用A。

那么是如何实现的呢?一般而言,处理消息的类是唯一的,而发送消息的类却是各种各样的,所以一般的做法是将回调方法做成一个接口,不同的发送者去实现该接口,并且把自己的接口实现类的对象在发送消息时传递给消息处理者。

(现在不太方便画图,之后再补上图)

现在以一个CS结构的示例来说明回调的过程:

Client类:

packagecom.test.callback;/*** Created by puyangsky on 2016/6/13.*/

public classClient {

Server server;publicClient(Server server) {this.server =server;

}public void sendMsg(finalString msg) {

System.out.println("客户端正在发生消息:" +msg);new Thread(newRunnable() {

@Overridepublic voidrun() {try{

//调用server类的获取消息方法,并且传入myCallback对象

server.getMsg(newmyCallback(), msg);

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}).start();

}

//实现Callback接口private class myCallback implementsCallback {

@Overridepublic void process(intstatus) {

System.out.println("处理成功,返回状态为:" +status);

}

}

}

回调接口类:

interfaceCallback {void process(intstatus);

}

Server类:

packagecom.test.callback;/*** Created by puyangsky on 2016/6/13.*/

public classServer {public void getMsg(Callback callback, String msg) throwsInterruptedException {

System.out.println("服务端获得消息:" +msg);

//模拟处理消息过程,等待两秒

Thread.sleep(2000);

System.out.println("服务端处理成功,返回状态为200");

//处理完消息,调用回调方法,告知客户端

callback.process(200);

}

}

测试类:

packagecom.test.callback;/*** Created by Administrator on 2016/6/13.*/

public classCallbackTest {public static voidmain(String[] args) {

Server server= newServer();

Client client= newClient(server);

client.sendMsg("hello");

}

}

输出结果:

ec0b5a634255b513ac70c37da6354317.png

上述代码完成的过程是模拟异步回调,回调分为同步和异步,区别就是需不需要等待服务器端的返回结果,本例中在客户端发送消息时加入了线程执行,就体现了异步。

感悟:

1、对回调机制要知其然知其所以然,用起来才更加顺手;

2、在自己做设计时碰到合适的场景也应该考虑采用同步或者异步的回调机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值