最近对 springmvc 的 threadlocal 工作原理感兴趣, 于是乎整理了一下其中奥秘,
首先, 多线程工作场景下, JVM 内存会分为两部分:线程的工作内存和主内存, 工作内存是线程之间相互独立的, 主内存是线程之间共享的, spring mvc 框架下的controller默认是单例模式, 并发情况下, 每个线程都会拷贝一份变量副本即局部变量, 存储于工作内存中, 所以spring mvc 的单例模式是线程安全的
如果线程之间需要同步某些信息, 怎么办呢
这个时候就要用到 volatile 关键字了, 比如 A 线程 对 volatile 修饰的变量做出了修改, 该变量会同步到主内存去,同时使其他线程的工作内存中的该变量副本会失效了, 其他线程再去获取该变量的时候, 就只能去主内存中获取到该变量 , 这样一来,被 volatile 修饰的变量在线程之间就实现同步了