当前位置:  技术问答>java相关

关于jsp线程安全的问题

    来源: 互联网  发布时间:2015-10-18

    本文导语:  看到一篇帖子,说了一个jsp线程不安全的问题,然后提出了一种将实例变量变成局部变量的方式,不是太明白。贴出来和大家讨论一下。             上面的程序模拟网上购物中的一部分,把用户在浏览器中输入的用...

看到一篇帖子,说了一个jsp线程不安全的问题,然后提出了一种将实例变量变成局部变量的方式,不是太明白。贴出来和大家讨论一下。

 
 
 
 
 
 
上面的程序模拟网上购物中的一部分,把用户在浏览器中输入的用户名,购买的物品名称,数量保存到表BUY中。在savebuy()函数中用到了实例变量,所以它不是线程安全的.因为:程序中的每一条语句都不是原子操作,如name=request.getParameter("name");在执行是会对应多个机器指令,在任何时候都可能因系统调度而转入睡眠状态,让其他的线程继续执行.如果线程A在执行到(1)的时候转入睡眠状态,线程B开始执行并改变QUANTITY的值,那么当又到A执行时,它会从调用savebuy()函数开始执行,这样它保存到表中的QUANTITY是被线程B改过的值,那么线程A对应的用户所实际购买的数量与保持到表中的数据不一致.这是个很严重的问题. 
 
三、解决方法 
(3)采用局部变量代替实例变量,函数savebuy()声明如下: 
因为在savebuy()中使用的是传给他的形参,是在堆栈中分配的,所以是线程安全的. 
public void savebuy(String name,String product, int quantity) 

...... 

 
调用方式改为: 
 
**************************************************************************
以上为帖子的大致内容,我不明白的地方是:
如果在/* (2) */ 发生作者所说的问题,那不也是不对的吗?

|
/* (2) */ 是从request获取,
一个servlet线程是在用户发送request创建,每个线程都对应不同的request,而/* (2) */取的值正是放在request中,所以是局部的;其实问题最关键点在于,不应该在jsp中写方法。

|
1、jsp运行前要编译成servlet, 而servlet是class
2、并发访问同一个jsp时,webserver上有多个线程同时执行同一个jsp(class)实例。这样会造成成员变量的互相篡改,从而导致错误。
3、局部变量在每个线程中构造,就是说有几个并发访问就有几套局部变量的实例。
4、这不仅是jsp或servlet的问题,所有多线程程序都要考虑同步的问题。

    
 
 

您可能感兴趣的文章:

  • jsp的线程中如何向客户端输出?
  • 帮我一个JSP线程的问题,我没有多少分了
  • Windows98下可以同时执行几个Java Servlet/JSP线程?
  • jsp中线程输出。
  • 请问我在jsp中启动的线程是不是随着页面的生成就自动结束了?(在线等着)
  • 编写线程安全的JSP程序
  • JBuilder运行JSP的问题,一次只运行一个JSP页面
  • 用tomcat作为jsp服务器,如何解决jsp中的汉字显示问题?
  • jbuilder中编译jsp(included by 另一个jsp文件)的一个问题??
  • 向大家求教一个问题!(好像挺难的!不过也不一定,因为我才学jsp不久,是个jsp低手!)
  • 一个JSP问题:请问如何得到document.referrer内容?我想知道连到A.jsp页面的用户从何处链接来得。
  • 高分问菜问题:怎么在JSP里包含其他JSP文件?
  • 用JB7开发JSP,遇到配置问题.用什么工具开发JSP又快又方便?
  • 各位高手:jsp文件包含jsp文件时的中文问题
  • 最后30分,用jsp中连接过informix的jsp高手请进来看看这个问题,好么?55555
  • 关于jsp调用javabean的问题!调用是成功了,但是有小问题!
  • jbuilder中jsp问题
  • (tomcat不认dom编译器 急死了)jsp问题:在bean加main方法,bean好用,在jsp中引用bean中出错
  • 关于jsp的几个问题
  • 50分!两个简单问题。.jsp文件中可以插入javascript代码吗?是否可以通过某框架中链接的target属性将.jsp文件在另一框架中显示?
  • JSP的应用问题
  • jsp的问题
  • 关于<jsp:include>问题:
  • 关于tomcat和jsp的问题,高手请进
  • jsp问题?
  • ###### 关于 jsp:useBean语法的问题 马上给分 #######
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JSP中清空cookie代码参考
  • 现有1.jsp、2.jsp、3.jsp三个文件,我怎么在3.jsp文件中得到1.jsp中输入的值?
  • 一个框界网爷包含上下两个网页a1.jsp和a2.jsp,怎么实现a1.jsp自身不变且提交数据到下面的a2.jsp呢?不胜感激,急..
  • 请问jsp和serlet之间怎么通讯,jsp和jsp之间呢?
  • 请问<%@include file="abc.jsp"%>与<jsp:include page="abc.jsp"/>之间的差别
  • response.sendRedirect("index.jsp") 和 <jsp:forward page="index.jsp"/>的区别?
  • 想把一个jsp转到另一个jsp页面,要穿参数,中文的(jsp变量)。谁教教我?!
  • aaa.jsp有如下链接,当单击该链接时将id值传递给bbb.jsp,怎样在bbb.jsp中引用这个id值?
  • jsp+bean还是jsp+ejb还是jsp+servlet还是asp+activex好?
  • 谁能告诉我,怎么调试jsp程序呀!我在jsp中调用java,但是Tomcat这家伙只会给我报jsp文件出错。这可怎么办呀?
  • jsp中如何获得当前jsp文件所在的目录,用request.getServletPath()得到的路径含有jsp文件名,有没有办法得到目录(不含文件名)?
  • 初学jsp,一个html调用一个jsp,这个jsp调用一个javaBean,已编译成类,最后如何部署(用j2sdkee)?
  • 我要学jsp,已经下载了j2ee1.4,需要一个支持jsp引擎的WEB服务器或jsp引擎!!(急,马上给分)
  • jsp中相对路径怎么表示?例如当前目录下的jsp目录里的文件。
  • 我已经在输出前包含了<jsp:include page="2.jsp"/>,
  • 欲学JSP,请教JSP资料,最好电子版。
  • jsp中文乱码 jsp mysql 乱码的解决方法
  • jsp+JavaBean vs jsp+Servlet+JavaBean
  • JSP/html 编辑器 Bravo JSP editor
  • JSP开发入门(五)--JSP其他相关资源
  • <jsp:include page="SystemLeft.jsp?TypeId=<%= itTypeId.toString() %>" flush="true" />


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3