zoukankan      html  css  js  c++  java
  • Servlet的多线程并发问题

    注意: servlet对象在tomcat服务器是单实例多线程的。

    因为servlet是多线程的,所以当多个servlet的线程同时访问了servlet的共享数据,如成员变量,可能会引发线程安全问题。

       解决办法:

                   1)把使用到共享数据的代码块进行同步(使用synchronized关键字进行同步)

                  2)建议在servlet类中尽量不要使用成员变量。如果确实要使用成员,必须同步。而且尽量缩小同步代码块的范围。(哪里使用到了成员变量,就同步哪里!!),以避免因为同步而导致并发效率降低。

    package com.loaderman.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 TestServlet extends HttpServlet {
    
        int count = 1;
    
        //servlet的多线程并发问题
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
    
            synchronized (TestServlet.class) {//锁对象必须唯一。建议使用类对象
                response.getWriter().write("你现在是当前网站的第" + count + "个访客");   //线程1执行完  , 线程2执行
    
                //线程1还没有执行count++
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                count++;
            }
        }
    }
  • 相关阅读:
    PHP调试的时候出现了警告:
    快报滚动
    js foreach、map函数
    箭头函数和普通函数的区别
    flex布局
    react+propTypes
    手机尺寸
    less的使用
    发现是在IE6-IE9下,下列元素table,thead,tfoot,tbody,tr,col,colgroup,html,title,style,frameset的innerHTML属性是只读的
    div+css 组织结构
  • 原文地址:https://www.cnblogs.com/loaderman/p/9994606.html
Copyright © 2011-2022 走看看