关于Servlet线程安全问题

  • Servlet线程安全

    • Servlet 是单实例多线程的环境下运行的。

      在服务器运行期间,一个Servlet接口实现类,只能创建一个实例对象(一个进程(Servlet接口实现类的实例对象) 对应 多个线程(用户请求),无论有多少个用户请求来访问该Servlet实例对象,都只是访问的同一

      个Servlet实例对象), 在服务器关闭的时候,会将所有创建的Servlet实现类的实例对象销毁。

    • 什么时候会出现线程安全问题?

      1.多线程并发执行

      2.存在共享数据

      3.共享数据有修改操作。

    • 分析在JVM虚拟机中哪些数据可能会存在线程安全问题,而哪些数据不会存在线程安全问题 ?

    1.首先局部变量不存在线程安全问题,因为局部变量在栈中存储,一个线程一个栈,这样每个线程的栈内存中都有自己的局部变量,所以局部变量内存空间不共享,也就不存在线程安全问题。
    
    2.常量不会被修改所以常量不存在线程安全问题。
    
    3.所有线程共享一个堆。
    
         - 堆内存中存储了Java对象。(new出来的java对象在堆中存储)
    
     - 对象中的实例变量是多线程共享的。当多线程并发操作,共同访问实例变量,并且涉及到修改操作的时候,就存在线程安全问题。(因为堆内存是多线程共享的,而存储在堆内存中的对象也就是共享的,对象中的实例变量也就是被共享的)
    
    4.所有线程共享一个方法区。
    
      - 方法区中的静态变量也是多线程共享的,当多线程并发操作,共同访问,并且涉及到修改操作静态变量的时候,也会存在线程安全问题。
    
    5.线程安全问题不只存在JVM中,也存在数据库中,例如:多线程同时修改一张表。
    
      - 解决方案:
    
    	  5.1 在java程序中使用synchronized关键字,让线程排队执行。
    
    	  5.2 行级锁(悲观锁)
    
    	  5.3 事务隔离级别
    
    	  5.5 乐观锁

    6.怎么解决Servlet的线程安全问题?

     解决方案:
    
    	 6.1 不使用实例变量,尝试使用局部变量
    
    	      String username=request.getParameter("username");
    
    	 6.2 若必须使用实例变量,那么考虑将该对象变成多例对象,一个线程一个java对象,这样实例变量的内存也不会共享了。
    
    	 6.3 若必须使用单例对象,那就只能使用synchronized线程同步机制,但是线程一旦排队执行,那么降低了吞吐量。用户体验下降。
    
    	   synchronized(this) {
    
    		username=request.getParameter("username");
    
    		response.getWriter().print("Congratulation    "+username+"    register    success!!!");
    }

JAVAEE_Servlet_18_关于Servlet线程安全问题的更多相关文章

  1. javaweb回顾第六篇谈一谈Servlet线程安全问题

    前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安全问题. 1:多线程的Servlet模型 要想弄清Servlet线程安全我们必须先要明白Servlet实例 ...

  2. Servlet线程安全问题(转载)

    转载地址:https://www.cnblogs.com/LipeiNet/p/5699944.html 前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安 ...

  3. Servlet线程安全问题

    Servlet采用单实例多线程方式运行,因此是线程不安全的.默认情况下,非分布式系统,Servlet容器只会维护一个Servlet的实例,当多个请求到达同一个Servlet时,Servlet容器会启动 ...

  4. (2.1)servlet线程安全问题

    本文参考链接:http://www.yesky.com/334/1951334.shtml 摘 要:介绍了Servlet多线程机制,通过一个实例并结合Java 的内存模型说明引起Servlet线程不安 ...

  5. 开玩笑Web它servlet(五岁以下儿童)---- 如何解决servlet线程安全问题

    servlet默认值是安全线的存在,但说白,servlet安全线实际上是一个多线程线程安全问题.因为servlet它正好是一个多线程的安全问题出现. 每次通过浏览器http同意提交请求,将一个实例se ...

  6. IT兄弟连 JavaWeb教程 Servlet线程安全问题

    在Internet中,一个Web应用可能被来自西面八方的客户并发访问(即同时访问),而且有可能这些客户并发访问的是Web应用中的同一个Servlet,Servlet容器为了保证能同时相应多个客户端要求 ...

  7. javaweb学习总结二十三(servlet开发之线程安全问题)

    一:servlet线程安全问题发生的条件 如果多个客户端访问同一个servlet时,发生线程安全问题,那么它们访问的是相同的资源.如果访问 的不是相同资源,则不存在线程安全问题. 实例1:不会产生线程 ...

  8. JavaWeb学习之Servlet(三)----Servlet的映射匹配问题、线程安全问题

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140529.html 一.Servlet映射匹配问题: 在第一篇文章中的 ...

  9. 玩转Web之servlet(五)---- 怎样解决servlet的线程安全问题

    servlet默认是存在线程安全问题的,但是说白了,servlet的线程安全问题实际上就是多线程的线程安全问题,因为servlet恰巧是一个多线程才会出现安全性问题. 浏览器每次通过http协议去提交 ...

随机推荐

  1. nacos配置中心之服务器端

    配置信息的发布 配置信息发布请求URL: POST: /v1/cs/configs nacos在STANDALONE模式或集群模式没有指定用mysql情况下使用derby数据库,在集群模式且指定mys ...

  2. wxWidgets源码分析(2) - App主循环

    目录 APP主循环 MainLoop 消息循环对象的创建 消息循环 消息派发 总结 APP主循环 MainLoop 前面的wxApp的启动代码可以看到,执行完成wxApp::OnInit()函数后,接 ...

  3. POJ-3026(图上的最小生成树+prim算法+gets函数使用)

    Borg Maze POJ-3026 一开始看到这题是没有思路的,看了题解才知道和最小生成树有关系. 题目的意思是每次走到一个A或者S就可以分为多个部分继续进行搜索.这里就可以看出是从该点分出去的不同 ...

  4. (十三)数据库查询处理之QueryExecution(2)

    (十三)数据库查询处理之QueryExecution(2) 实验室这一周真的忙爆(虽然都是各种打杂的活)所以拖了很久终于在周末(摸鱼)把实验3做完了.同时准备把和查询这一块有关的博客补一下.然后就进入 ...

  5. struts2.0中ognl栈的解析

    ongl详解: ValueStack是Struts2的一个接口,字面意义为值栈,OgnlValueStack是 ValueStack的实现类,客 户端发起一个请求,struts2架构会创建一个acti ...

  6. 搭建zabbix服务1

    环境准备: 静态ip 主机名 各自配置好主机名 # hostnamectl set-hostname --static zabbixserver.cluster.com 三台都互相绑定IP与主机名 # ...

  7. 局部莫兰指数的计算(运用ArcMap)

    做任务时需要运用到局部莫兰指数,卡在用Python计算的思路上好久,最后发现可以用ArcGIS进行处理,步骤简单易懂. 主要步骤为: 1.读入数据(一定要为shp文件),对于用ecognition直接 ...

  8. RSA典型非对称加密算法

    私钥加密-->公钥解密,反之亦然,但不安全.也可以当做数字签名. public class RSACoder {         //非对称加密算法         public static  ...

  9. 2019 南京网络赛 B super_log 【递归欧拉降幂】

    一.题目 super_log 二.分析 公式很好推出来,就是$$a^{a^{a^{a^{...}}}}$$一共是$b$个$a$. 对于上式,由于指数太大,需要降幂,这里需要用到扩展欧拉定理: 用这个定 ...

  10. Android | 玩转AppBarLayout,设置scrollFlags滑动属性详解

    CoordinatorLayout与AppBarLayout的配合使用,在之前的文章中我们也经常使用,主要是专门用来打造各种炫酷的效果. 有童鞋看了之前的文章反馈对AppBarLayout中的scro ...