为什么我的servlet不是并发的

我同时发了两个请求但是确实一个一个执行的能帮忙分析一下么图片是控制台输出的结果下面是做测试的代码是get请求publicvoiddoGet(HttpServletRequ... 我同时发了两个请求 但是 确实一个一个执行的 能帮忙分析一下么 图片是控制台输出的结果 下面是做测试的代码 是get请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Staticvar.time = new Date().getTime();
System.out.println(String.valueOf(Staticvar.time) + "程序访问"
+ sdf.format(new Date()));
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Staticvar.time + "访问结束" + sdf.format(new Date()));
}
展开
 我来答
木子小妖0
2011-07-26
知道答主
回答量:25
采纳率:0%
帮助的人:17.9万
展开全部
首先,servlet服务器会为每个servlet实例维护一个线程池。
一个servlet实例会服务于多个线程,除非实现SingleThreadModel,这个可以由服务器管理,你不用人工处理,当然可以通过配置文件,改动服务器对servlet的管理
其次,你的测试方法就是不对的,System.out.println在同一个控制台输出,会发生I/O阻塞同样会影响结果
百度网友845f74e61
2011-07-26 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1632万
展开全部
你怎么并发的请求?
从时间上看,象点两次。

并发处理是WEB容器来做的,不是你来控制的。

比如你这个servelt是取数据,一人取得数据比较多,先从一个IE上请求;一个取得比较少,后从另一个IE上请求。

你这样看一下,控制台输出,后面那个应该选响应结束,WEB容器对于每一个请求,都创建一个servlet实例来处理。这就可以证明是并发的了。
追问
这两次请求是一起请求的 之所以用Thread.sleep(); 就是要让servlet停止一段时间模仿业务处理 在用浏览器发出第一个请求后 立即 就又打开一个页面发出第二个请求
追答
在用浏览器发出第一个请求后 立即 就又打开一个页面发出第二个请求
这样你就不能保证是同时,你找另一个人帮你,一二三,一直点一下试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leixw0102
2011-07-26 · 超过13用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:38.4万
展开全部
你用的是servlet 2.5的API还是servlet3.0的API。servlet的却是会等待处理完成后在处理后一个请求。如果要实现异步的话。在doGet,或者doPost中把逻辑处理单独启动个线程
或者可以使用servlet3.0--对应的是tomcat7.0。已经对异步进行了支持。可以参考http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html?ca=drs-cn-0423
追问
可是我们正式服务器的tomcat的版本是5.5的 怎么办啊 能给一个小的doGet 方法么
追答
在doGet里面启动一个线程就行,伪代码
doGet(HttpServletRequest request,HttpServletResposne response ) throws Exception{
//TODO 接收参数
//TODO 启动另一个线程,在县城里面处理业务逻辑
new Thread().start();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuhaobooo
2011-07-26 · TA获得超过282个赞
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:72.6万
展开全部
servlet如果没有配置成single模式,肯定的并发的,你写的测试代码不对,你把Thread.sleep(10000); 中的10000改成一个大点的随机数看看,因为你都是延时10000,那所有的操作不还是按顺序执行的吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-27
展开全部
不存在Servlet实例
Servlet的生存周期:容器装载Servlet→初始化Servlet init()→调用service()→destory
假如某个服务器不能同时并发运行service方法,可以用SingleThreadModel(单线程模式) 接口。
这个接口保证不会有两个以上的线程(Threads)并发运行。
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式