java代码调用异步接口 java 异步调用接口

java 异步调用方法

1. 使用wait和notify方法

创新互联是一家专业提供南岔企业网站建设,专注与网站设计、做网站H5响应式网站、小程序制作等业务。10年已为南岔众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。

这个方法其实是利用了锁机制,直接贴代码:

public class Demo1 extends BaseDemo{ private final Object lock = new Object(); @Override public void callback(long response) { System.out.println("得到结果"); System.out.println(response); System.out.println("调用结束"); synchronized (lock) { lock.notifyAll(); } } public static void main(String[] args) { Demo1 demo1 = new Demo1(); demo1.call(); synchronized (demo1.lock){ try { demo1.lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("主线程内容"); } }

可以看到在发起调用后,主线程利用wait进行阻塞,等待回调中调用notify或者notifyAll方法来进行唤醒。注意,和大家认知的一样,这里wait和notify都是需要先获得对象的锁的。在主线程中最后我们打印了一个内容,这也是用来验证实验结果的,如果没有wait和notify,主线程内容会紧随调用内容立刻打印;而像我们上面的代码,主线程内容会一直等待回调函数调用结束才会进行打印。

没有使用同步操作的情况下,打印结果:发起调用 调用返回 主线程内容 得到结果 1 调用结束

而使用了同步操作后:

发起调用 调用返回 得到结果 9 调用结束 主线程内容2. 使用条件锁

和方法一的原理类似:

public class Demo2 extends BaseDemo { private final Lock lock = new ReentrantLock(); private final Condition con = lock.newCondition(); @Override public void callback(long response) { System.out.println("得到结果"); System.out.println(response); System.out.println("调用结束"); lock.lock(); try { con.signal(); }finally { lock.unlock(); } } public static void main(String[] args) { Demo2 demo2 = new Demo2(); demo2.call(); demo2.lock.lock(); try { demo2.con.await(); } catch (InterruptedException e) { e.printStackTrace(); }finally { demo2.lock.unlock(); } System.out.println("主线程内容"); } }

基本上和方法一没什么区别,只是这里使用了条件锁,两者的锁机制有所不同。

java常见的几种调用机制(同步调用,异步调用

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、异步概念

异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。

必须强调一个基础逻辑,异步是一种设计理念,异步操作不等于多线程,MQ中间件,或者消息广播,这些是可以实现异步处理的方式。

同步处理和异步处理相对,需要实时处理并响应,一旦超过时间会结束会话,在该过程中调用方一直在等待响应方处理完成并返回。同步类似电话沟通,需要实时对话,异步则类似短信交流,发送消息之后无需保持等待状态。

2、异步处理优点

虽然异步处理不能实时响应,但是处理复杂业务场景,多数情况都会使用异步处理。

异步可以解耦业务间的流程关联,降低耦合度;

降低接口响应时间,例如用户注册,异步生成相关信息表;

异步可以提高系统性能,提升吞吐量;

流量削峰即把请求先承接下来,然后在异步处理;

异步用在不同服务间,可以隔离服务,避免雪崩;

异步处理的实现方式有很多种,常见多线程,消息中间件,发布订阅的广播模式,其根据逻辑在于先把请求承接下来,放入容器中,在从容器中把请求取出,统一调度处理。

注意:一定要监控任务是否产生积压过度情况,任务如果积压到雪崩之势的地步,你会感觉每一片雪花都想勇闯天涯。

3、异步处理模式

异步流程处理的实现有好多方式,但是实际开发中常用的就那么几种,例如:

基于接口异步响应,常用在第三方对接流程;

基于消息生产和消费模式,解耦复杂流程;

基于发布和订阅的广播模式,常见系统通知

异步适用的业务场景,对数据强一致性的要求不高,异步处理的


当前标题:java代码调用异步接口 java 异步调用接口
当前URL:http://hbruida.cn/article/ddgeegg.html