当前位置: 代码迷 >> Java Web开发 >> 求解:JSP的多线程同步解决方法
  详细解决方案

求解:JSP的多线程同步解决方法

热度:723   发布时间:2016-04-17 11:09:37.0
求解:JSP的多线程同步
在看JSP中的多线程同步时看到以下实例

http://localhost:8080/Jsp/exercises/instanceconcurrenttest.jsp?username=a&password=123
http://localhost:8080/Jsp/exercises/instanceconcurrenttest.jsp?username=b&password=456
分别找开两个空白页,然后分别输入以上地址后回车。
显示的结果为:
第一个页面为空
第二个页面为空显示为:
http-8080-2
username=b
password=456
http-8080-1
username=b
password=456


书上的解释我看的不大明白。有没有朋愿意帮忙解释一下
1.>为什么第一个页面是空白的
2.>为什么第二个页面显示 打印了两次,除了线程的名字不样外,其它都一样

3.>关于类变量和实例变量 的区别在这里怎么体现

谢谢。


Java code
<%@ page contentType="text/html;charset=GBK" %><html><body><%! String username; String password; java.io.PrintWriter output;%><% username=request.getParameter("username"); password=request.getParameter("password"); output=response.getWriter(); showUserInfo();%><%! public void showUserInfo(){  int i=0;  double sum=0.0;  while(i++ <200000000){      sum+=i;  } output.println(Thread.currentThread().getName()+"<br>"); output.println("username="+ username +"<br>"); output.println("password="+ password +"<br>");   } %>  



------解决方案--------------------
servlet 单例,共享全局变量。

线程1进入,3个变量被初始化;然后 while(i++ <200000000)执行的时候,
线程2进入,3个变量重新赋值;
output变为了线程2的响应流,所以1页面无内容;线程1 2执行后,内容都打印到了2页面上;


------解决方案--------------------
上面正解!
------解决方案--------------------
不要使用全局变量
单例下线程不安全
使用局部变量
------解决方案--------------------
1楼正解,
  相关解决方案