zoukankan      html  css  js  c++  java
  • springmvc 线程安全的理解

    springmvc 是基于servlet的研发-- 继承frameworkServlet ;

    那么spring是基于方法的拦截。

    spring的contorller,默认配置是单例,其中注入的service和dao也是单例。

    那么我们通常认为是contorller是线程不安全的。认为spring线程安不安全,得先知道什么是线程安全?

    网上有这样一个答案:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么这个类就是线程安全的。

    那么我们可以发现有2个问题:

    1.contorller中出现了公共的非final变量,不同线程交替赋值;

    2.单例模式中并发时,对一个东西的并发实例化。

    使用spring时我们应该尽量避免在contorller里使用变量。

    contorller会在容器启动的时候实例化contorller,注入的对象我们也尽量不要懒加载。那么线程的安全问题得到解决。

    一个http请求是一个独立的线程,当访问打容器时会创建request对象,隐藏获取到的request也不同的。

    当然如果有需要特殊情况,可以修改contorller的默认属性@Scope("prototype")。这样没错访问都会重新创建contorller增加系统开销。

  • 相关阅读:
    python内置模块collections介绍
    Python的set集合详解
    不同 Python 数据类型的搜寻
    Python 分支、循环、条件与枚举
    ssrf爆破mysql
    php反序列化
    thinkphp历史漏洞
    Thinkphp 缓存RCE
    绕WAF文章收集
    mssql手工盲注
  • 原文地址:https://www.cnblogs.com/tiandjnet/p/9258344.html
Copyright © 2011-2022 走看看