异步调用主要用于当前程序的执行不用等待调用方法执行结束就可以继续执行。用一个最简单的例子来说,当前的方法要调用一个发送短信的方法,但是发送短信的方法调用了外部的接口,这样就导致短信发送方法耗费的时间很长,或者网络的故障等原因使得发送短信的方法影响了当前的程序。
在这种情况下就需要使用异步调用机制,一个正常的程序流程如下:
1、进入当前方法
2、调用远程方法
3、离开当前方法
在上面的3个步骤中,传统的方法执行步骤是按照1.2.3的顺来来执行,这样第2执行很长时间就会导致第3布一致等待执行。对于上面的步骤来说,异步调用就可执行完1之后立即执行2同时也执行3,即步骤3不用等待步骤2的执行结束。
异步调用的实现的原理就是多线程,在当前的程序上单独使用一个线程来调用方法,而不用阻塞当前的线程。这样就实现了异步调用。异步调用在java中使用多线程实现,在C#使用委托机制实现。
下面是一个最简单的异步调用实现,不用等待调用的结果,但是他表现了两种语言对异步调用的处理,如果需要更复杂的功能,再这种思想上改进即可。
异步调用JAVA
使用多线程匿名内部类实现异步调用。
packagecom.sinosoft.lis.pubfun.sms;
importcom.sinosoft.lis.pubfun.GlobalInput;
importcom.sinosoft.utility.TransferData;
importcom.sinosoft.utility.VData;
publicclassSmsSendAsync{
privatefinalGlobalInputcGlobalInput;
privateStringprtNo;
publicSmsSendAsync(StringprtNo) {
this.prtNo= prtNo;
}
publicvoidsend() {
//新定义线程来处理发送
newThread(){
publicvoidrun(){
//这里可以写一个等待方法,让当前线程等待10秒钟现象更明显
//控制台打印日志
System.out.println(Content);
}
}.start();
}
publicstaticvoidmain(String[] args) {
StringprtNo = "1001200912310155555";
//调用异步发送短信
SmsSendAsyncsendAsync = newSmsSendAsync(prtNo);
sendAsync.send();
System.out.println("已经签单");
}
}