spring中的线程安全

spring中的线程安全

  • 重要:spring没有对bean的多线程安全问题做保证措施,但如果我们需要在bean中声明有状态的变量,可以使用 ThreadLocal 把变量变为线程私有的,如果bean的实例变量或类变量需要在多个线程之间共享,可以使用synchronized、lock、CAS等这些实现线程同步的方法。
  • ThreadLocal是一个为线程提供线程局部变量的工具类。它为线程提供一个线程私有的变量副本,这样多个线程都可以随意更改自己线程局部的变量,不会影响到其他线程。需要注意的是,ThreadLocal提供的只是一个浅拷贝,如果变量是一个引用类型,那么就要考虑它内部的状态是否会被改变,想要解决这个问题可以通过重写ThreadLocal 的 initialValue() 函数来自己实现深拷贝。ThreadLocal与 synchronized这样的锁机制是不同的。首先,它们的应用场景与实现思路就不一样,锁更强调的是如何同步多个线程去正确地共享一个变量,ThreadLocal则是为了解决同一个变量如何不被多个线程共享。从性能开销的角度上来讲,如果锁机制是用时间换空间的话,那么ThreadLocal就是用空间换时间。

你可能感兴趣的:(10,SSM框架,设计模式)