关于使用TreadLocal解决线上问题的疑问?

来源:14-9 缓存在高并发场景中的生产问题分享

HenceForward

2024-09-06

有个疑问,为什么要用线程本地变量,直接方法调用的末尾清除缓存不就行了吗?
首先本地缓存设置过期时间,其次在方法的结尾手动清除本地缓存,是否也可以避免Full GC?

写回答

1回答

甲蛙

2024-09-06

你说的在方法的结尾清除,其实这个就是线程本地变量的功能,在线程结束后,线程本地变量也释放了。你这个方法会有问题,缓存本质上是多线程共享,才有缓存的意义,所以在结尾清除本地缓存,就可能影响其它线程的读取。如果你做成每个线程各自存取缓存,那这个就是线程本地变量的功能了。

0
2
甲蛙
回复
HenceForward
一般不会OOM,但确实会占用内存,线程池复用时,threadlocal变量会覆盖。不remove,也就占用着线程池数量相等的内存变量,线程数一般不会高到导致内存溢出。但还是推荐remove,可以在AOP类的环绕通知里加个remove
2024-09-23
共2条回复

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程