采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
有个疑问,为什么要用线程本地变量,直接方法调用的末尾清除缓存不就行了吗? 首先本地缓存设置过期时间,其次在方法的结尾手动清除本地缓存,是否也可以避免Full GC?
你说的在方法的结尾清除,其实这个就是线程本地变量的功能,在线程结束后,线程本地变量也释放了。你这个方法会有问题,缓存本质上是多线程共享,才有缓存的意义,所以在结尾清除本地缓存,就可能影响其它线程的读取。如果你做成每个线程各自存取缓存,那这个就是线程本地变量的功能了。
谢谢老师,我理解您的意思了!这里我还有一个疑问,针对您这个场景,threadLocal的数据是否也需要在finally里面给remove掉,因为threadlocal会有内存泄露的隐患,spring再执行操作的时候是服用线程池的,线程执行完可能不会释放,这样会不会导致threadLocal里面的数据越来越大,最终造成OOM呢?
一般不会OOM,但确实会占用内存,线程池复用时,threadlocal变量会覆盖。不remove,也就占用着线程池数量相等的内存变量,线程数一般不会高到导致内存溢出。但还是推荐remove,可以在AOP类的环绕通知里加个remove
登录后可查看更多问答,登录/注册
最新版Spring3.0仿12306售票系统实战
1.1k 28
581 12
615 8
658 8
296 8