我是靠谱客的博主 勤恳绿茶,这篇文章主要介绍java异步回调讲解,现在分享给大家,希望可以做个参考。

所谓回调:就是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打电话告诉他晚上可以一起吃饭了。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
package com.cmh.mq.thread.AsynCallback; /** * 这是回调接口 * * @author CMH * * @param <T> */ public interface CallBack{ void reply(String message); }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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); } }

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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("小祝晚上有时间"); } }


测试类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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异步回调讲解内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部