zoukankan      html  css  js  c++  java
  • Servlet中进行context属性的同步

    Servlet中进行context属性的同步;

    必须所有使用context的servlet都进行synchronized才可以实现同步;

    servlet:

    package com.stono.servlet.synchronize;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class TestServletA extends HttpServlet {
        private static final long serialVersionUID = 1L;
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = req.getServletContext();
            Object attribute;
            synchronized (context) {// 为了防止在sleep过程中其他线程(servlet)修改context中的属性a;
                context.setAttribute("a", "a");
                try {
                    Thread.sleep(3000);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                attribute = context.getAttribute("a");
            }
            PrintWriter writer = resp.getWriter();
            writer.println(attribute);
        }
    }
    package com.stono.servlet.synchronize;
    import java.io.IOException;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class TestServletB extends HttpServlet {
        private static final long serialVersionUID = 1L;
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = req.getServletContext();
            synchronized (context) {// 必须这个类也进行synchronized才可以实现同步;这种情况下,这个servlet也会等带3秒的;
                context.setAttribute("a", "change to b");
            }
        }
    }

     servlet实现SingleThreadModel是不行的,该接口已经被废弃,而且只是对某一个servlet实现单线程处理;

    不能保证线程之间的安全性;

  • 相关阅读:
    QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考
    从开源协议到谷歌禁用华为、Docker实体清单事件
    如何画好架构图?
    使用委托的异步方法
    里氏替换原则(转)
    HTTP协议详解(转)
    httpApplication事件和asp.net生命周期(整理)
    WebDev.WebServer.exe
    正则表达式的3种匹配模式
    Code First实体与数据表之间的映射关系
  • 原文地址:https://www.cnblogs.com/stono/p/4846662.html
Copyright © 2011-2022 走看看