zoukankan      html  css  js  c++  java
  • Servlet是线程安全的吗?

    资料:

    (1)servlet的实例变量是线程不安全的,而其JSP也默认是以多线程方式执行(原创):

    https://blog.csdn.net/hunkdong/article/details/443430

    (2)springmvc中的controller是单例的

    https://www.cnblogs.com/flywang/p/5483732.html

    归纳:

    (1)Servlet不是线程安全的,因为它采用多线程方式运行其service方法.也就是说,当多个用户并发访问的时候,可能存在线程交互的问题。

    (2)servlet的实例变量是线程不安全的,而JSP也默认是以多线程方式执行,所以其线程也是不安全的!

    如下:

    public class SplitPageXmlServlet extends HttpServlet {    
           String pageIndex=request.getParameter("pageIndex");
           String pageSize=0=request.getParameter("pageSize");
           String recordCount=request.getParameter("recordCount");
           public void doPost(HttpServletRequest request, 
                                      HttpServletResponse   response)         
                   throws ServletException, IOException {}
    }

    上面的pageIndex, pageSize, recordCount都是实例变量,它们都是线程不安全的!

    (3)解决办法:

    要解决servlet线程不安全性,其中一个主要的方法就是取消Servlet的实例变量,变成无状态的Servlet。

    另外一种方法是对共享数据进行同步操作。使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段。

    (4)总而言之,凡是在线程内生成的数据对象,都是线程安全的。

    (5)多线程的优点:

    以多线程方式执行可大大降低对系统的 资源需求,提高系统的并发量及响应时间。

    (6)springmvc的controller与struts2的action的区别

    1. springmvc的请求调度器是单Servlet多线程的,其controller默认是单例的,因为controller是以方法参数来接收请求参数的,也就是在线程内声明并接收请求参数的

    2. struts2的action是存在实例变量的,即是以action的实例变量来接收请求参数的,所以是线程不安全的,故只能在每个线程内部都创建一个action对象,即action是多实例的

  • 相关阅读:
    echo
    shell
    grub
    find
    脚本案例
    dd if= of= MBR
    cat <<EOF> file
    fieldset——一个不常用的HTML标签
    闪烁图片
    跑马灯效果
  • 原文地址:https://www.cnblogs.com/wu-1393180819/p/9868398.html
Copyright © 2011-2022 走看看