Spring 中的单例 bean 的线程安全问题

发布时间 2023-09-11 17:15:26作者: xiuer211

线程安全问题是由静态变量引起的,如果只是对静态变量读取的话,没有线程安全问题,如果有写入的话,就会导致线程安全问题
bean可以分为两种,一种是有状态,一种没有状态
状态可以认为是实例变量,可以保存数据
如果没有状态,也就没有线程安全问题,使用sigleton范围,提高性能
如果有状态,使用prototype范围,防止重复读取
可以使用threadlocal保存状态,每个线程都拥有自己的threadlocal,这样就不会有线程安全问题。但是threadlocal可能会导致内存泄露,ThreadLocalMap的entry保存着key和value,threadlocal只是作为key,没有真正保存对象,因为ThreadLocalMap的entry指向threadlocal的key是弱引用,ThreadLocalMap的entry指向value是强引用