您的位置:首页 > 其它

深入研究Servlet线程安全性问题

2018-02-03 22:26 239 查看
Servlet实例,是由Servlet引擎实例化的,一般只会实例化一个实例来处理不同用户的请求(一个用户一个线程),如Tomcat..

但不同用户访问一个Servlet实例时,如果此实例有实例成员变量,就会有并发性的问题,因为JMM模型中,实例变量是存储在堆空间的,而堆空间是线程共享的。

所有,同一Servlet实例在不同线程中,实例变量是共享的,就有被不同用户线程同时访问。

public class ConcurrentTest extends HttpServlet {
    PrintWriteroutput; //此实例成员,会在不同线程中共享

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        String  username;

        response.setContentType("text/html;charset=gb2312");

        username=request.getParameter("username");

        output=response.getWriter();

        try {

            //为了突出并发问题,在这设置一个延时

            Thread.sleep(5000);

            output.println("用户名:"+username+"<BR>");

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}
https://www.cnblogs.com/gw811/archive/2012/09/07/2674859.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: