日期:2014-05-17  浏览次数:20701 次

求解: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楼正解,