1. 程式人生 > >非同步呼叫實現java

非同步呼叫實現java

非同步呼叫主要用於當前程式的執行不用等待呼叫方法執行結束就可以繼續執行。用一個最簡單的例子來說,當前的方法要呼叫一個傳送簡訊的方法,但是傳送簡訊的方法呼叫了外部的介面,這樣就導致簡訊傳送方法耗費的時間很長,或者網路的故障等原因使得傳送簡訊的方法影響了當前的程式。

在這種情況下就需要使用非同步呼叫機制,一個正常的程式流程如下:

1、進入當前方法

2、呼叫遠端方法

3、離開當前方法

在上面的3個步驟中,傳統的方法執行步驟是按照1.2.3的順來來執行,這樣第2執行很長時間就會導致第3布一致等待執行。對於上面的步驟來說,非同步呼叫就可執行完1之後立即執行2同時也執行3,即步驟3不用等待步驟

2的執行結束。

非同步呼叫的實現的原理就是多執行緒,在當前的程式上單獨使用一個執行緒來呼叫方法,而不用阻塞當前的執行緒。這樣就實現了非同步呼叫。非同步呼叫在java中使用多執行緒實現,在C#使用委託機制實現。

下面是一個最簡單的非同步呼叫實現,不用等待呼叫的結果,但是他表現了兩種語言對非同步呼叫的處理,如果需要更復雜的功能,再這種思想上改進即可。

非同步呼叫JAVA

使用多執行緒匿名內部類實現非同步呼叫。

package com.sinosoft.lis.pubfun.sms;

import com.sinosoft.lis.pubfun.GlobalInput;

import

 com.sinosoft.utility.TransferData;

import com.sinosoft.utility.VData;

publicclassSmsSendAsync{

privatefinalGlobalInputcGlobalInput;

privateStringprtNo;

public SmsSendAsync(String prtNo) {

this.prtNo = prtNo;

}

publicvoid send() {

//新定義執行緒來處理髮送

newThread(){

publicvoid run(){

    //這裡可以寫一個等待方法,讓當前執行緒等待

10秒鐘現象更明顯

//控制檯列印日誌

System.out.println(Content);

}

}.start();

}

publicstaticvoid main(String[] args) {

String prtNo = "1001200912310155555";

//呼叫非同步傳送簡訊

SmsSendAsync sendAsync = newSmsSendAsync(prtNo);

sendAsync.send();

System.out.println("已經簽單");

}

}