为什么我的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()));
} 展开
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()));
} 展开
7个回答
展开全部
你怎么并发的请求?
从时间上看,象点两次。
并发处理是WEB容器来做的,不是你来控制的。
比如你这个servelt是取数据,一人取得数据比较多,先从一个IE上请求;一个取得比较少,后从另一个IE上请求。
你这样看一下,控制台输出,后面那个应该选响应结束,WEB容器对于每一个请求,都创建一个servlet实例来处理。这就可以证明是并发的了。
从时间上看,象点两次。
并发处理是WEB容器来做的,不是你来控制的。
比如你这个servelt是取数据,一人取得数据比较多,先从一个IE上请求;一个取得比较少,后从另一个IE上请求。
你这样看一下,控制台输出,后面那个应该选响应结束,WEB容器对于每一个请求,都创建一个servlet实例来处理。这就可以证明是并发的了。
追问
这两次请求是一起请求的 之所以用Thread.sleep(); 就是要让servlet停止一段时间模仿业务处理 在用浏览器发出第一个请求后 立即 就又打开一个页面发出第二个请求
追答
在用浏览器发出第一个请求后 立即 就又打开一个页面发出第二个请求
这样你就不能保证是同时,你找另一个人帮你,一二三,一直点一下试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用的是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
或者可以使用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();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
servlet如果没有配置成single模式,肯定的并发的,你写的测试代码不对,你把Thread.sleep(10000); 中的10000改成一个大点的随机数看看,因为你都是延时10000,那所有的操作不还是按顺序执行的吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-07-27
展开全部
不存在Servlet实例
Servlet的生存周期:容器装载Servlet→初始化Servlet init()→调用service()→destory
假如某个服务器不能同时并发运行service方法,可以用SingleThreadModel(单线程模式) 接口。
这个接口保证不会有两个以上的线程(Threads)并发运行。
另外,团IDC网上有许多产品团购,便宜有口碑
Servlet的生存周期:容器装载Servlet→初始化Servlet init()→调用service()→destory
假如某个服务器不能同时并发运行service方法,可以用SingleThreadModel(单线程模式) 接口。
这个接口保证不会有两个以上的线程(Threads)并发运行。
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询