Threadlocal对象的使用 小记

ThreadLocal——线程变量,是Thread的局部变量,用于编多线程程序。

ThreadLocal是Java中的一个类,它提供了一种线程局部变量的机制。每个ThreadLocal对象都可以维护一个线程私有的变量副本,这样每个线程都可以独立地操作自己的副本,而不会影响其他线程的副本。

例如:

每个线程都要使用A对象,一起对A进行操作会有线程安全问题。

使用ThreadLocal时会对象初始化成本线程独有的对象,便于线程使用且其他线程无法使用。

使用ThreadLocal让某个需要用到的对象在线程间隔离(每个线程都有自己的独立的对象),且在任何方法中都可以轻松获取到该对象。不仅实现了线程安全,同时不需要加锁,提高了执行效率,更高效的利用内存、节省开销。

ThreadLocal的方法:

        T initialValue(): 初始化,会返回当前线程对应的初始值,这是一个延迟加载的方法,只有在调用get()方法的时候才会触发

        T get(): 得到这个线程对应的 value。如果是首次调用 get(),则会调用 initialize 来得到这个值。

        void set(T t): 为这个线程设置一个新值

        void remove(): 删除对应这个线程的值

ThreadLocal的调用方法:

        当线程使用threadlocal 时,是将threadlocal当做当前线程thread的属性ThreadLocalMap 中的一个Entry的key值,实际上存放的变量是,Entry的value值,我们实际要使用的值是value值。即健为此ThreadLocal,值为实际需要的成员变量。

        使用ThreadLocal时要注意内存泄露,key的泄露和value的泄露,Entry未删除或者CurrentThread 当前线程依然运行。由于ThreadLocalMap 的生命周期跟 Thread 一样长,对于重复利用的线程来说,如果没有手动删除(remove()方法)对应 key 就会导致entry(null,value)的对象越来越多,从而导致内存泄漏.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值