美文网首页
Servlet为什么是线程不安全的?

Servlet为什么是线程不安全的?

作者: Arvesynden | 来源:发表于2019-10-11 16:36 被阅读0次

       因为servlet是多线程的,而servlet的生命周期又web容器进行管理(Tomcat)。当客服端对servlet第一次进行请求时候,服务器(tomcat)会对根据web.xml文件进行实例化这个serlvet(所以web.xml中不能出现任何错误)。当用户再对该serlvet进行请求时候,不会再对该serlvet进行实例了。这里都是共享一个servlet对象(为单例模式)。这样会导致出现的状况是,多个线程进行请求同一个serlvet时候,只要对serlvet的实例变量进行操作时候,这时候会导致了该实例变量时候,会出现数据不一致的状况。这样会导致一系列的安全问题。

原文链接:https://blog.csdn.net/hym740639005/article/details/81278258

        要解释为什么Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的。

       当Tomcat接收到Client的HTTP请求时,Tomcat从线程池中取出一个线程,之后找到该请求对应的Servlet对象并进行初始化,之后调用service()方法。要注意的是每一个Servlet对象再Tomcat容器中只有一个实例对象,即是单例模式。如果多个HTTP请求请求的是同一个Servlet,那么着两个HTTP请求对应的线程将并发调用Servlet的service()方法。

https://www.cnblogs.com/chanshuyi/p/5052426.html

Servlet的线程安全问题主要是由于实例变量使用不当而引起的。

解决办法:

1、实现 SingleThreadModel 接口

2、同步对共享数据的操作

3、避免使用实例变量

https://blog.csdn.net/after_you/article/details/54173012

相关文章

  • 暑假学习打卡2

    Servlet是单例的,一个类只有一个对象,可能存在多个Servlet.线程不安全,效率高. Servlet作用:...

  • Servlet为什么是线程不安全的?

    因为servlet是多线程的,而servlet的生命周期又web容器进行管理(Tomcat)。当客服端对serv...

  • Servlet是线程安全的吗?被面试官问到崩溃

    Servlet不是线程安全的。 要解释为什么Servlet为什么不是线程安全的,需要了解Servlet容器(即To...

  • servlet是线程安全的吗?

    Servlet不是线程安全的。多线程访问同一个资源,可能造成线程的不安全. 什么是线程安全? 如果你的代码所在的进...

  • Servlet-08(Servlet小结)

    1.Servlet线程安全问题 (1)为什么说Servlet会有线程安全问题? a. 容器对于某个servlet,...

  • ThreadLocal可以解决并发问题吗?

    前言 到底什么是线程的不安全?为什么会存在线程的不安全?线程的不安全其实就是多个线程并发的去操作同一共享变量没用做...

  • action

    由于 struts2 是基于servlet封装的 所以线程不安全 所以在为了是使请求的action安全,所以aci...

  • HashMap问答

    HashMap是不是线程安全? 不是线程安全的。 为什么不安全? 线程不安全的两个添加是,数据可共享、可修改。Ha...

  • HashMap为什么是线程不安全的

    一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下...

  • 今日份打卡 237/365

    技术文章SimpleDateFormat是线程不安全的!在多线程环境下测试,看看源码理解一下为什么是不安全的Jav...

网友评论

      本文标题:Servlet为什么是线程不安全的?

      本文链接:https://www.haomeiwen.com/subject/nycxmctx.html