zoukankan      html  css  js  c++  java
  • 理解springMVC的controller

    controller默认是单例模式,所有线程使用同一个对象,当controller类中没有定义类变量,或存在常量时,是线程安全的。
    使用单例模式的优点:
    提高访问速度,单例只有一个对象,不用每次都new
    当不在controller中定义类变量时,单例是完全够用的。
    存在类变量不是线程安全的原因
    当定义一个类变量s时,在此时他是所有线程所共享的变量,线程a对其进行了修改,线程b对其操作时,会直接获得到线程a修改后的变量s,这样s在线程间重复修改,不是安全状态。
    解决非线程安全
    1.可以在controller类上添加注释@Scope(“prototype”);将其改为多例模式。
    2.对类变量进行ThreadLocal(线程本地存储处理)。。。不实际。

    servlet的单实例多线程模型。
    servlet只有在启动时调用一次init()方法,只是初始化了一次,产生了一个实例对象。所以其是单例模式。其优点与controller差不多

    ps:spring对每一个request(对应controller中的方法)都进行了ThreadLocal处理,使得每个请求都是独立的线程,保证线程安全。
    关于ThreadLocal
    看这个:http://blog.csdn.net/wangpei555/article/details/61418132

    具体源码待补。。

  • 相关阅读:
    MySQL不支持的特性
    MySQL查询执行路径
    MySQL索引
    索引的选择性
    MySQL学习笔记_时间,多表更新,数据库元数据
    PowerDesigner 小技巧
    linux下清空文件内容
    mysql跟踪sql
    Navicat For Mysql快捷键
    PHP 配置多站点多目录
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551216.html
Copyright © 2011-2022 走看看