概述
所谓回调:就是A类中调用B类中的某个方法M1,然后B类中反过来调用A类中的方法M2,M2这个方法就叫回调方法。实际在使用的时候,也会有不同的回调形式,这里主要讲一下异步回调形式。
- Class A实现接口CallBack callback——背景1
- class A中包含一个class B的引用b ——背景2
- class B有一个参数为callback的方法m(CallBack callback) ——背景3
- A的对象a调用B的方法 m(CallBack callback) ——A类调用B类的某个方法M1
- 然后b就可以在m(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法M2
举个列子:
小梁GG和小祝MM在同一家公司上班,今天是情人节,小梁GG晚上下班想请小祝MM一起吃饭,但是小祝MM手头上还有很多事情没有忙完,如果下班之前不能弄完,晚上就要加班了,就没有时间了,她需要到下班的时候才能回复。到了快下班的时候,小祝MM手头上的事情完成了,晚上不用加班了,就马上给小梁GG打电话告诉他晚上可以一起吃饭了。
package com.cmh.mq.thread.AsynCallback;
/**
* 这是回调接口
*
* @author CMH
*
* @param <T>
*/
public interface CallBack{
void reply(String message);
}
package com.cmh.mq.thread.AsynCallback;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 这是小梁GG
*
* @author CMH
*
*/
public class Liang implements CallBack {
private static Log logger = LogFactory.getLog(Liang.class);
/**
* 小祝MM
*/
private Zhu zhu;
public Liang(Zhu zhu) {
super();
this.zhu = zhu;
}
/**
* 小梁GG邀约小祝MM晚上一起吃饭
*
* @param invitation
*/
public void invite(final String invitation) {
logger.info("小梁GG正在给小祝MM打电话邀请她晚上一起吃饭");
// 线程(异步)
new Thread(new Runnable() {
@Override
public void run() {
/**
* Liang调用Zhu的方法
*/
zhu.excuteMessage(Liang.this, invitation);
}
}).start();
logger.info("小梁GG已经邀请完成,等待小祝最后回复");
// 约完之后,小梁GG继续上班
play();
}
private void play() {
System.out.println("小梁GG继续上班");
}
@Override
public void reply(String message) {
System.out.println("来自小祝MM的回复:" + message);
}
}
package com.cmh.mq.thread.AsynCallback;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 这是小祝MM
*
* @author CMH
*
*/
public class Zhu {
private static Log logger = LogFactory.getLog(Zhu.class);
public void excuteMessage(CallBack callBack, String message) {
logger.info("来自小梁GG的邀约:" + message);
// 模拟小祝MM办自己的事情
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 打电话告诉小梁GG
callBack.reply("小祝晚上有时间");
}
}
测试类
package com.cmh.mq.thread.test;
import org.junit.Test;
import com.cmh.mq.thread.AsynCallback.Liang;
import com.cmh.mq.thread.AsynCallback.Zhu;
/**
* 测试类
*
* @author CMH
*
*/
public class AsynCallBackTest {
@Test
public void callBackTest() {
// 创建一个小祝MM
Zhu zhu = new Zhu();
// 创建一个小梁GG
Liang liang = new Liang(zhu);
// 小梁GG邀请小祝MM晚上吃饭
liang.invite("晚上有时间吗?我请你吃饭");
}
}
最后
以上就是勤恳绿茶为你收集整理的java异步回调讲解的全部内容,希望文章能够帮你解决java异步回调讲解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复