由于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的多线程并发情况相关推荐

  1. servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变

    Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  2. Servlet 单例多线程

    Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  3. servlet单实例多线程模式

    Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在 ...

  4. JSP —— Servlet 单实例多线程模式

    转载自:http://kakajw.iteye.com/blog/920839 前言:Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP ...

  5. Servlet RequestDispatcher需要注意的情况

    Servlet RequestDispatcher需要注意的情况: 如果使用getServletContext().getRequestDispatcher("/a.do")得到R ...

  6. java 多线程 变慢_java多线程并发程序执行慢有什么原因?该怎么解决?

    我们在执行java多线程并发程序时有时候会碰到执行特别慢的场景,小伙伴们知道是什么原因导致的吗?它要怎么解决呢?下面小编就为你讲讲. 前提:在某地需要开发一个应用系统,此系统主要功能是能够让一些中小型 ...

  7. 秒杀系统并发情况下解决超卖问题

    非分布式秒杀系统 并发情况下解决超卖问题 乐观锁防止超卖 / 令牌桶限流/ redis缓存 /接口限流/接口加盐/单用户限制访问频率/消息队列异步处理订单 #数据库表drop table if exi ...

  8. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  9. dateformat java 并发_java.text.DateFormat 多线程并发问题

    在日常开发中,java.text.DateFormat 应该算是使用频率比较高的一个工具类,经常会使用它 将 Date 对象转换成字符串日期,或者将字符串日期转化成 Date 对象.先来看一段眼熟的代 ...

最新文章

  1. GitHub标星2000+,如何用30天啃完TensorFlow2.0?
  2. nodejs安装jsdom模块出现MSB4025错误
  3. ios打包ipa的四种实用方法
  4. unity拖拽 到固定位置_Unity3D拖动任意对象GameObject移动到任意地方
  5. skb_shinfo(skb)-dataref 含义
  6. ajax请求, 前后端, 代码示例
  7. 数据类型转换_自动转换
  8. python画两条曲线_查找在matplotlib中绘制的两条曲线之间的区域(在区域之间填充)...
  9. Linux下Shell文件内容替换(sed)(转)
  10. 爬虫学习笔记(1)---简单的爬取百度贴吧
  11. 计算机原理及应用课程,课程描述
  12. HTC vive开发
  13. 2022-2028年中国有色金属市场供需前景预测及投资策略研究报告
  14. 程序员大保健指南,给自己的身心偶尔放松的机会
  15. Zigbee和WiFi的信道重叠
  16. iphone/ipad 连接smb服务器,实现局域网内文件共享
  17. 网站分析05——流量分析
  18. PDF怎么合并?分享几种非常简单的合并方法
  19. Python数据分析-绘图-2-Seaborn进阶绘图-6-回归图
  20. 最新版的转转验机源码+完整教程

热门文章

  1. bzoj3771:Triple
  2. Egret资源管理解决方案
  3. ECMall2.x模板制作入门系列之2(模板标签/语法)
  4. UVALive 4764 dp
  5. 简单的Flash GUI工具(Simple Flash GUI Tool)
  6. 畅通您的iOS开发之路
  7. 全源最短路径之弗洛伊德算法(C语言)
  8. Java代码实现Fibonacci数列
  9. python连接influxdb_python 访问 InfluxDB 数据库
  10. 服务器训练数据 关闭终端,一文明白使用nohup将服务器训练程序后台运行不关闭+随时通过查看训练情况输出与visdom可视化...