在看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楼正解,