今天出个考题,答的上来的月薪15k没问题吧?
java吧
全部回复
仅看楼主
level 9
炜爵爷cc 楼主
那就是不断新建ThreadLocal对象set会出现什么问题?如果只是永远使用同一个threadLocal对象,会出现这个问题吗?
2019年05月24日 08点05分 1
level 9
炜爵爷cc 楼主
楼主先来抛砖引玉吧。先说只有一个threadlocal对象情况。
弱引用entry 引用了threadlocal,这个threadlocal对象永远存在,所以回收线程不会将entry加入到weakQueue中进行处理。但是每次set都是将之前的保存的对象给处理掉。所以不会发生内存泄漏。
2019年05月24日 08点05分 2
level 9
炜爵爷cc 楼主
那不断新建threadlocal对象呢,这个对象在方法调用后就被销毁,所以线程会回收weak entry到queue中进行垃圾回收,所以也不会发生内存泄漏。那么问题来了,什么时候才会发生内存泄漏?
2019年05月24日 08点05分 3
我关注你了,大佬[乖]
2019年05月30日 02点05分
level 8
。。。。我不懂。。可我17k[黑线]
2019年05月24日 09点05分 4
@HN信息Di价助手 原来pdd,这家公司确实火,有前途
2019年05月24日 10点05分
You're awesome[真棒]
2019年05月24日 09点05分
那我能拿20k了?赶紧跳槽去
2019年05月24日 10点05分
层主哪工作啊?
2019年05月24日 10点05分
level 7
不懂诶!垃圾回收要耗时间的,有没可能制造垃圾速度过快。gc回收不过来
2019年05月24日 10点05分 5
你仔细想想,ThreadLocal为每一个线程单独分配一块内存存储数据,但是你用线程池试试?每一个线程并不是使用完就销毁,也就是说如果两个请求使用的是同一个线程,那么可能造成内存泄露,所以在每次请求完之前得调用remove方法
2019年05月24日 10点05分
@西风的话、 就算是同一个线程,但我每次在用之前都重新set了,还会出问题?
2019年05月24日 10点05分
@炜爵爷cc 那你为什么要使用threadlocal?Threadlocal是干什么用的?
2019年05月24日 10点05分
@书院大叔 对呀,threadlocal被回收了,但是只要这个线程被回收,那就不存在内存泄露。如果这个线程不被回收,那下次调用线程对应的map时候,还是会把空的entry去掉。除非线程不挂,又永远不再调用map,那就算有一个对象留在那里,也无伤大雅吧
2019年05月24日 10点05分
level 13
线程池会利用同一个线程多次,所以每个线程使用完后要调用remove方法
2019年05月24日 10点05分 6
但是我每次在业务最开始的地方就会重新set,那还需要remove吗?
2019年05月24日 10点05分
@炜爵爷cc 那你为什么要使用ThreadLocal么?如果每次都重新set,那你线程封闭的意义何在?
2019年05月24日 10点05分
@西风的话、 事实上我只是懒得传参,本来应该和线程关系不大,一路参数传到后面去就行了。我用threadlocal可以直接拿,比较舒服
2019年05月24日 10点05分
你贴吧升了一级?
2019年05月24日 10点05分
level 9
炜爵爷cc 楼主
不知道是不是我理解错了?我总感觉如今的threadlocal不可能发生内存泄露
2019年05月24日 10点05分 7
level 8
在ThreadLocal的get,set的时候都会清除线程Map里所有key为null的value。所以最怕的情况就是,threadLocal对象设null了,开始发生“内存泄露”,然后使用线程池,这个线程结束,线程放回线程池中不销毁,这个线程一直不被使用,或者分配使用了又不再调用get,set方法,那么这个期间就会发生真正的内存泄露。
2019年05月24日 10点05分 8
复制的吗?
2019年05月24日 10点05分
@炜爵爷cc 百度直接复制
2019年05月24日 10点05分
level 14
thredlocal在什么情况下使用
2019年05月26日 16点05分 11
啥时候使用呀?我就是一个请求时候用一个tl,这样这个请求任何方法都能用
2019年05月26日 23点05分
level 1
逗么?硬扣某些小知识点,就算阿里技术总监都不一定全部答得出来[汗]。你以为人脑是计算机做的么?
2019年05月31日 03点05分 13
level 9
多个localthread进行set的话,当前线程的enter中会有多个localthread作为key,弱引用在垃圾回收时内存空间不足会回收掉吧,不会引起内存泄露。单个localthread,每次set,在当前线程内上一次set的value值就会变成无引用对象等待回收,也不会造成内存泄露。应届毕业生拙见,有错误望指导。
2019年05月31日 08点05分 14
level 1
线程的threadlocals中的entry是弱引用,可以被回收掉,但是value回收不了导致内存泄露。什么年代了还有这个问题,网上答案一搜一大把。。
2019年09月29日 12点09分 15
1