驗證發佈到Tomcat的基於JAX-WS的Webservice的併發

在項目中遇到了,需要接受本地請求調用,然後調用其他方的webService提供的服務,將返回的結果加工,處理完成之後返回本地結果。

但是中間有一個小的顧慮,如果有A,B,C同時調用前置機提供的服務,比如前置機中需要10S來處理當前的請求信息,那麼是否會出現串行執行的情況,也就是最後一個排隊的C會等待30S的時間才能夠得到所需要的結果,當然,容器或者框架肯定會處理這麼低級的問題,保險起見,我們還是驗證一下如下:
建立一個WebService,其相關的實現類為:
public class ProvinceCardServiceImpl implements ProvinceCardService {

public String getMsg(String str) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello "+str;
}
}
本地java客户端調用程序如下:
public class ProvinceCardClient implements Runnable {
public void run() {
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(System.currentTimeMillis())));
PcServicePortType service = new PcService().getPcServiceHttpPort();
System.out.println(service.getMsg("Andy"));
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(System.currentTimeMillis())));
}
public static void main(String[] args) {
new Thread(new ProvinceCardClient()).start();
new Thread(new ProvinceCardClient()).start();
new Thread(new ProvinceCardClient()).start();
}
}
下面是程序的一種可能結果:
2013-04-24 09:43:14
2013-04-24 09:43:14
2013-04-24 09:43:14
Hello Andy
Hello Andy
2013-04-24 09:43:25
2013-04-24 09:43:25
Hello Andy
2013-04-24 09:43:25

作者 陳字文(熱衷於PM\ORACLE\JAVA等,歡迎同行交流):ziwen#163.com 扣扣:4零9零2零1零零

可以看到,10S,接受並且同時完成了三個請求,所以,這個處理是併發的也必須是併發的。