【Servlet】Servlet的多线程并发情况
由于Servlet在Tomcat中是以单例模式存在的,所以当多个Servlet线程同时访问了Servlet的共享数据,如成员变量,可能会引发线程安全问题。
下面是之前做的一个Demo:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class LoginServlet extends HttpServlet {private static String usernameRef;private static String passwordRef;public static void doPost(String username, String password) {try {usernameRef = username;if ("a".equals(username)) {Thread.sleep(5000);}passwordRef = password;System.out.println("username=" + usernameRef + " password=" + passwordRef);} catch (InterruptedException e) {e.printStackTrace();}}/*** 输出样例:* username=b password=bb* username=b password=aa* @param request* @param response* @throws ServletException* @throws IOException*/@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {LoginThreadA threadA = new LoginThreadA();LoginThreadB threadB = new LoginThreadB();threadA.start();threadB.start();}@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}}
public class LoginThreadA extends Thread {@Overridepublic void run() {LoginServlet.doPost("a", "aa");}}
public class LoginThreadB extends Thread {@Overridepublic void run() {LoginServlet.doPost("b", "bb");}}
运行的时候,有时的确会出现一些不符的username和password组合,的确会存在线程安全问题。
【Servlet】Servlet的多线程并发情况相关推荐
- servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变
Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...
- Servlet 单例多线程
Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...
- servlet单实例多线程模式
Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在 ...
- JSP —— Servlet 单实例多线程模式
转载自:http://kakajw.iteye.com/blog/920839 前言:Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP ...
- Servlet RequestDispatcher需要注意的情况
Servlet RequestDispatcher需要注意的情况: 如果使用getServletContext().getRequestDispatcher("/a.do")得到R ...
- java 多线程 变慢_java多线程并发程序执行慢有什么原因?该怎么解决?
我们在执行java多线程并发程序时有时候会碰到执行特别慢的场景,小伙伴们知道是什么原因导致的吗?它要怎么解决呢?下面小编就为你讲讲. 前提:在某地需要开发一个应用系统,此系统主要功能是能够让一些中小型 ...
- 秒杀系统并发情况下解决超卖问题
非分布式秒杀系统 并发情况下解决超卖问题 乐观锁防止超卖 / 令牌桶限流/ redis缓存 /接口限流/接口加盐/单用户限制访问频率/消息队列异步处理订单 #数据库表drop table if exi ...
- java线程钥匙_Java多线程并发编程/锁的理解
一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...
- dateformat java 并发_java.text.DateFormat 多线程并发问题
在日常开发中,java.text.DateFormat 应该算是使用频率比较高的一个工具类,经常会使用它 将 Date 对象转换成字符串日期,或者将字符串日期转化成 Date 对象.先来看一段眼熟的代 ...
最新文章
- GitHub标星2000+,如何用30天啃完TensorFlow2.0?
- nodejs安装jsdom模块出现MSB4025错误
- ios打包ipa的四种实用方法
- unity拖拽 到固定位置_Unity3D拖动任意对象GameObject移动到任意地方
- skb_shinfo(skb)-dataref 含义
- ajax请求, 前后端, 代码示例
- 数据类型转换_自动转换
- python画两条曲线_查找在matplotlib中绘制的两条曲线之间的区域(在区域之间填充)...
- Linux下Shell文件内容替换(sed)(转)
- 爬虫学习笔记(1)---简单的爬取百度贴吧
- 计算机原理及应用课程,课程描述
- HTC vive开发
- 2022-2028年中国有色金属市场供需前景预测及投资策略研究报告
- 程序员大保健指南,给自己的身心偶尔放松的机会
- Zigbee和WiFi的信道重叠
- iphone/ipad 连接smb服务器,实现局域网内文件共享
- 网站分析05——流量分析
- PDF怎么合并?分享几种非常简单的合并方法
- Python数据分析-绘图-2-Seaborn进阶绘图-6-回归图
- 最新版的转转验机源码+完整教程
热门文章
- bzoj3771:Triple
- Egret资源管理解决方案
- ECMall2.x模板制作入门系列之2(模板标签/语法)
- UVALive 4764 dp
- 简单的Flash GUI工具(Simple Flash GUI Tool)
- 畅通您的iOS开发之路
- 全源最短路径之弗洛伊德算法(C语言)
- Java代码实现Fibonacci数列
- python连接influxdb_python 访问 InfluxDB 数据库
- 服务器训练数据 关闭终端,一文明白使用nohup将服务器训练程序后台运行不关闭+随时通过查看训练情况输出与visdom可视化...