JAVAEE_Servlet_18_关于Servlet线程安全问题
关于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线程安全问题的更多相关文章
- javaweb回顾第六篇谈一谈Servlet线程安全问题
前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安全问题. 1:多线程的Servlet模型 要想弄清Servlet线程安全我们必须先要明白Servlet实例 ...
- Servlet线程安全问题(转载)
转载地址:https://www.cnblogs.com/LipeiNet/p/5699944.html 前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安 ...
- Servlet线程安全问题
Servlet采用单实例多线程方式运行,因此是线程不安全的.默认情况下,非分布式系统,Servlet容器只会维护一个Servlet的实例,当多个请求到达同一个Servlet时,Servlet容器会启动 ...
- (2.1)servlet线程安全问题
本文参考链接:http://www.yesky.com/334/1951334.shtml 摘 要:介绍了Servlet多线程机制,通过一个实例并结合Java 的内存模型说明引起Servlet线程不安 ...
- 开玩笑Web它servlet(五岁以下儿童)---- 如何解决servlet线程安全问题
servlet默认值是安全线的存在,但说白,servlet安全线实际上是一个多线程线程安全问题.因为servlet它正好是一个多线程的安全问题出现. 每次通过浏览器http同意提交请求,将一个实例se ...
- IT兄弟连 JavaWeb教程 Servlet线程安全问题
在Internet中,一个Web应用可能被来自西面八方的客户并发访问(即同时访问),而且有可能这些客户并发访问的是Web应用中的同一个Servlet,Servlet容器为了保证能同时相应多个客户端要求 ...
- javaweb学习总结二十三(servlet开发之线程安全问题)
一:servlet线程安全问题发生的条件 如果多个客户端访问同一个servlet时,发生线程安全问题,那么它们访问的是相同的资源.如果访问 的不是相同资源,则不存在线程安全问题. 实例1:不会产生线程 ...
- JavaWeb学习之Servlet(三)----Servlet的映射匹配问题、线程安全问题
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140529.html 一.Servlet映射匹配问题: 在第一篇文章中的 ...
- 玩转Web之servlet(五)---- 怎样解决servlet的线程安全问题
servlet默认是存在线程安全问题的,但是说白了,servlet的线程安全问题实际上就是多线程的线程安全问题,因为servlet恰巧是一个多线程才会出现安全性问题. 浏览器每次通过http协议去提交 ...
随机推荐
- linux 安装node和pm2
用yum安装 curl -sL https://rpm.nodesource.com/setup_10.x | bash - yum install -y nodejs npm install -g ...
- 翻译:《实用的Python编程》02_05_Collections
目录 | 上一节 (2.4 序列) | 下一节 (2.6 列表推导式) 2.5 collections 模块 collections 模块为数据处理提供了许多有用的对象.本部分简要介绍其中的一些特性. ...
- Docker SDK for Python
一.概述 Docker引擎API的Python库.它允许您执行docker命令所做的任何操作,但可以在Python应用程序中运行容器.管理容器.管理群集等. 官方文档: https://docker- ...
- wxWidgets源码分析(6) - 窗口关闭过程
目录 窗口关闭过程 调用流程 关闭文档 删除视图 删除文档对象 关闭Frame App清理 多文档窗口的关闭 多文档父窗口关闭 多文档子窗口关闭 窗口的正式删除 窗口关闭过程总结 如何手工删除view ...
- 基于4H-SIC的先进集成电路用n型LDMOS晶体管
基于4H-SIC的先进集成电路用n型LDMOS晶体管 摘要: 通过对具有不同的设计方式的具有减小的表面电场的横向4H-SIC-N型-横向扩散金属氧化物半导体(LDMOS)晶体管进行测量和模拟,得到了得 ...
- Linux速通02 命令格式
命令的格式 # 格式:命令 [选项][参数] * 命令:告诉 Linux操作系统执行什么 * 选项:说明命令运行的方式(可以改变命令的功能).以 "-"字符开始 * 参数:说明命令 ...
- 2020年12月-第02阶段-前端基础-CSS Day07
CSS Day07 CSS高级技巧 理解 能说出元素显示隐藏最常见的写法 能说出精灵图产生的目的 能说出去除图片底侧空白缝隙的方法 应用 能写出最常见的鼠标样式 能使用精灵图技术 能用滑动门做导航栏案 ...
- JAVA-标识符、变量、数据类型
标识符和关键字 所有的标识符否应该以字母a ~ z和 A ~Z ,美元符($).下划线(_)开始. 首字符之后可以是字母a ~ z和 A ~Z ,美元符($).下划线(_)的任意字符组合. 注 ...
- 学员和教师管理优化用例点整理v2.0
更新记录: 更新内容 更新人 更新时间 新建 Young 2021.01.08 12:06 彭洋洋确认结果疑问 Young 2021.01.08 15:06 问题集锦 1. 购买成功页点击完成返回路径 ...
- MyBatis(九):MyBatis类型处理器(TypeHandler)详解
TypeHandler简介 TypeHandler,顾名思义类型转换器,就是将数据库中的类型与Java中的类型进行相互转换的处理器. MyBatis 在设置预处理语句(PreparedStatemen ...