tomcat中的线程问题2

网友投稿 632 2022-11-27

tomcat中的线程问题2

tomcat中的线程问题2

最近在看线程的有关知识,碰到一个小问题,目前还没有解决,现记录下来。 如果在我们自己写的servlet里有成员变量,因为多线程的访问就会出现一些线程问题。这点大家都知道,我们看下面的例子。

public class ConcurrentTest extends HttpServlet { PrintWriter output; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username; response.setContentType("text/html;charset=gb2312"); username=request.getParameter("Username"); output=response.getWriter(); try { //为了突出并发问题,在这设置一个延时 Thread.sleep(5000); output.println("用户名:"+username+"
"); } catch (Exception e) { e.printStackTrace(); } }}

部署在tomcat7上

然后我们在浏览器上发两个链接

a: class SimpleServlet extends HttpServlet{ // A variable that is NOT thread-safe! private int counter = 0; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().println(""); resp.getWriter().println(this + " ==> "); resp.getWriter().println(Thread.currentThread() + ":
"); for (int c = 0; c < 10; c++){ resp.getWriter().println("Counter = " + counter + "
"); try { Thread.sleep((long) Math.random() * 1000); counter++; } catch (InterruptedException exc){} } resp.getWriter().println(""); }}

和第一个例子似乎差不多,只是变量由PrintWriter变成了int。

我们在做三个请求。

在tomcat7下 结果是

com.zwchen.servlet.SimpleServlet@109da93:

Counter = 0

Counter = 1

Counter = 2

Counter = 3

Counter = 4

Counter = 5

Counter = 6

Counter = 7

Counter = 8

Counter = 9

com.zwchen.servlet.SimpleServlet@109da93:

Counter = 10

Counter = 11

Counter = 12

Counter = 13

Counter = 14

Counter = 15

Counter = 16

Counter = 17

Counter = 18

Counter = 19

com.zwchen.servlet.SimpleServlet@109da93:

Counter = 20

Counter = 21

Counter = 22

Counter = 23

Counter = 24

Counter = 25

Counter = 26

Counter = 27

Counter = 28

Counter = 29

并没有出现我们想象中的乱序问题。

一种解释是tomcat7中使用了ThreadPoolExecutor技术。

但是我依然不明白,那为什么同是在tomcat7下,第一个例子就会出现覆写的问题呢?

这个问题,估计的看源码才行。

如果有哪位大侠知道问题的答案请告诉我,跪谢了。

感谢glt

参考资料

两个例子分别来自下面两个地址 详细信息大家自己去看看吧

​​http://zwchen.iteye.com/blog/91088​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring事务失效的一种原因关于this调用的问题
下一篇:华为的面试题 要求8分钟写出代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~