1、同步调用

同步调用是最基本的调用方式,对象b中的方法直接调用对象a的方法,这个时候程序会等待对象a的方法执行完返回结果之后才会继续往下走。

代码如下:

public class A {
public void methodA()
{
System.out.println("this is class A method");
}
}

public class B {
public void methodB()
{
A a = new A();
a.methodA();
System.out.println("this is class B method");
}

}

public class Test {
public static void main(String[] args) {
B b = new B();
b.methodB();
}

}

结果:

this is class A method

this is class B method

2、异步调用

对象b中的方法调用对象a的方法,程序并不需要等待对象a的方法返回结果值,直接继续往下走。

代码如下:

public class A extends Thread{
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("this is class A method");
}

}

public class B {
public void methodB()
{
A a = new A();
a.start();
System.out.println("this is class B method");
}

}

public class Test {
public static void main(String[] args) {
B b = new B();
b.methodB();
}
}

结果:

this is class B method

this is class A method

说明:异步调用我们通常采用多线程的方法来达到目的

3、回调

对象a的方法methodA()中调用对象b的methodB()方法,在对象b的methodB()方法中反过来调用对象a的callBack()方法,这个callBack()方法称为回调函数,这种调用方法称为回调。

代码如下:

public class A {
public void methodA()
{
B b = new B();
b.methodB(new A());
System.out.println("this is class A method : methodA");
}
public void callBack()
{
System.out.println("this is class A method : callBack");
}

}

public class B {
public void methodB(A a)
{
System.out.println("this is class B method : methodB");
a.callBack();
}

}

public class Test {
public static void main(String[] args) {
A a = new A();
a.methodA();
}

}

运行结果:

this is class B method : methodB
this is class A method : callBack

this is class A method : methodA

注意:这里如果为了代码的扩展性更好,可以把类A与类B抽象出一个接口出来,然后用实现类去实现着两个接口,这样代码的扩展性会更好,也能满足更多的业务场景。

回调的核心在于:回调方将本身对象传给调用方,调用方在本身代码逻辑执行完之后,调用回调方的回调方法。

java常见的几种调用机制(同步调用,异步调用,回调)的更多相关文章

  1. Java常见的几种内存溢出及解决方法

    Java常见的几种内存溢出及解决方法[情况一]:java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另一 ...

  2. python 37 同步、异步调用

    目录 1. 阻塞与非阻塞 2. 同步与异步 2.1 异步调用 2.2 同步调用 2.3 异步调用回收的第一种方式 3. 异步调用+回调函数 3.1 requests模块 3.2 异步调用回收的第二种方 ...

  3. 浅谈WebService开发二(同步与异步调用)转

    上文 <http://www.dotnetgeek.cn/xuexiwebservice1.html>已经跟大家说了,如果创建一个webservice和简单的调用,本文将注重webserv ...

  4. C#:Func的同步、异步调用

    using System; namespace ActionDemo { class Program { static void Main(string[] args) { Console.Write ...

  5. [SAP ABAP开发技术总结]Function远程、同步、异步调用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. C#:Func的同步、异步调用(转)

    实际开发中,对于一些耗时较长的操作,我们往往会将其封装成异步方式调用,以加速系统响应或改善用户体验,下面是一个示例: 有一个现成的类MyMath,里面有一个Add方法: 1 public class ...

  7. C# Func的同步、异步调用

    using System; namespace ActionDemo { class Program { static void Main(string[] args) { Console.Write ...

  8. js同步、异步、回调的执行顺序以及闭包的理解

    首先,记住同步第一.异步第二.回调最末的口诀 公式表达:同步=>异步=>回调 看一道经典的面试题: for (var i = 0; i < 5; i++) { setTimeout( ...

  9. 「JavaScript」同步、异步、回调执行顺序之经典闭包setTimeout分析

    聊聊同步.异步和回调 同步,异步,回调,我们傻傻分不清楚, 有一天,你找到公司刚来的程序员小T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”.小T微笑着答应了,眼角却滑 ...

  10. 同步、异步、回调执行顺序之经典闭包setTimeout分析

    聊聊同步.异步和回调 同步,异步,回调,我们傻傻分不清楚, 有一天,你找到公司刚来的程序员小T,跟他说:“我们要加个需求,你放下手里的事情优先支持,我会一直等你做完再离开”.小T微笑着答应了,眼角却滑 ...

随机推荐

  1. Idea_00_资源贴

    一.精选资料 tengj/IntelliJ-IDEA-Tutorial IntelliJ IDEA 使用教程-极客学院 二.参考资料 eclipse&Myeclipse&Intelli ...

  2. L140

    一本载有许多时装照片的杂志是用带有光泽的优质纸印制的.A glossy magazine has lots of pictures of fashionable clothes and is prin ...

  3. L126

    Like so many things, it is not what's outside, but what is inside that counts. 许多事物都是如此,外表看起來虽不起眼,但是 ...

  4. 关于bind named.conf.options

    /etc/named/named.conf.options中的Options参数   listen-on port 53 { any; }; 监听在这部主机系统上面的哪个网路介面.预设是监听在loca ...

  5. 暴力破解Windows RDP(3389)

    RDP是远程桌面协议. $ nmap your_target Starting Nmap 7.01 ( https://nmap.org ) at 2016-09-20 17:29 CST Nmap ...

  6. MarkDown小技巧

    MarkDown编辑 MarkDown编辑的时候,可以直接插入HTML的编辑手法. 例如如果想要将一段话中的某一个或者某几个字设为其他颜色,但又不想将这几个字与这段话分割的时候,可以这样 你可以这样将 ...

  7. phpcms URL

    http://www.jb51.net/cms/112109.html 静态URL生成规则 http://v9.help.phpcms.cn/html/2010/database_1228/107.h ...

  8. Android spannableStringBuilder用法整理

    Android spannableStringBuilder用法整理 分类: Android开发2013-11-29 10:58 5009人阅读 评论(0) 收藏 举报 Androidspannabl ...

  9. HDU - 6333:Harvest of Apples (组合数前缀和&莫队)

    There are n n apples on a tree, numbered from 1 1 to n n . Count the number of ways to pick at most ...

  10. 如何解决无法通过SSL加密与SQLServer建立连接

    在部署项目时,经常会遇到驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接,错误:Java.lang.RuntimeException: Could not gene ...