class ApplicationContext{
private final NetworkObject networkObject = new networkObject();
public ApplicationContext(){
networkObject.setHost("host");
networkObject.setParams("param");
}
public searchObjects(ObjectType objType){
networkObject.doSearch(buildQuery(objType));
}
}
class NetworkObject{
private final SearchObject searchObject = new SearchObject();
public doSearch(SearchQuery searchQuery){
searchObject.search(searchQuery); //threadsafe, takes 15(s) to return
}
}
考虑一个运行web应用程序的web服务器,该应用程序只创建一个ApplicationContext实例(单例)并使用相同的applicationInstance来调用searchObjects例如为什么多线程似乎不能加速我的web应用程序?
ApplicationContext appInstance =
ApplicationContextFactory.Instance(); //singleton
到网页上每一个新的请求,说 'search.jsp的' 发出呼叫
appInstance.searchObjects(objectType);
我提出1000个请求为“search.jsp的页面。所有线程都使用相同的ApplicationContext实例,而searchObject.search()方法需要15秒才能返回。我的问题是当所有其他线程执行searchObject.search()函数或所有线程同时执行searchObject.search()时等待轮到他们(15秒)执行,为什么?
我希望我已经提出了我的问题非常清楚??
更新: 谢谢所有澄清我的疑问。这里是我的第二个问题,当我这样做应该遵守的性能有什么区别:
public synchronized doSearch(SearchQuery searchQuery){
searchObject.search(searchQuery); //threadsafe, takes 15(s) to return
}
OR
public doSearch(SearchQuery searchQuery){
searchObject.search(searchQuery); //threadsafe, takes 15(s) to return
}
我相信使用功能“doSearch”没有synchronized关键字,应给予更多的性能。但是,当我今天进行测试时,结果是以另一种方式出现的。当我使用同步关键字时,性能相似或有时更好。
任何人都可以解释行为。我应该如何调试这种情况。
问候,
佩里
请看我上面的更新! – pankajt 2009-05-18 14:41:47