zoukankan      html  css  js  c++  java
  • Java Web学习笔记-Servlet不是线程安全的

    由于Servlet只会有一个实例,多个用户同时请求同一个Servlet时,Tomcat会派生出多条线程执行Servlet的代码,因此Servlet有线程不安全的隐患.如果设计不当,系统就会出现问题.

    package com.helloxr.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ThreadSafetyServlet extends HttpServlet {
    
        
        private static final long serialVersionUID = 1212121211L;
        
        private String name;
        
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            name = request.getParameter("name"); // 从request中读取name参数
            try{
                Thread.sleep(5000);   // 为突出效果,让线程沉睡5秒钟
            }catch(InterruptedException e){
                
            }
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html");
            response.getWriter().println("您好, " + name + ". 您使用了 GET 方法提交数据");
        }
    
        
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            name = request.getParameter("name");
            response.getWriter().println("您好, " + name + ". 您使用了 POST 方法提交数据");
        }
    }

    为了突出效果,doGet()方法让线程沉睡5秒,5秒内分别用两个浏览器访问 ThreadSafetyServlet?name=lmn 与ThreadSafetyServlet?name=1233343434.显示的结果均为:

    ""您好, 1233343434. 您使用了 GET 方法提交数据",这就意味着程序出现了问题.

  • 相关阅读:
    全选、全不选、反选
    IE Tester 怎样使用firebug 调试工具?
    策略模式
    模板方法模式
    迭代器模式——android中使用
    android 实现圆形波纹动画
    android 窗口的使用
    AlertDialog 基本使用
    国外android 网站
    ViewDragHelper 任意拖动
  • 原文地址:https://www.cnblogs.com/datapool/p/6262617.html
Copyright © 2011-2022 走看看