zoukankan      html  css  js  c++  java
  • 并发编程:ThreadLocal

    什么是ThreadLocal

    ThreadLocal正如其名,是一个线程本地变量,每个线程独自持有,保证了该变量的线程安全性,还可以在线程上下文中传递。

    ThreadLocal如何实现

    每个线程中存在一个ThreadLocalMap对象,key是ThreadLocal对象本身,value是ThreadLocal对象set的值。
    Map->key是一个弱引用,每次垃圾回收的时候都会去尝试回收key。

    ThreadLocal与内存泄漏

    这里其实就引发出一个问题,我们平时通常是使用线程池来管理线程的。当线程池中的线程的ThreadLocal对象被set了值并使用以后,key在强引用结束后就会随着gc被回收,然而value却仍然在map中存在直接引用,导致无法回收,这时候就引发了内存泄漏。所以我们必须在使用完对应的对象时,调用threadlocal.remove()方法防止内存泄漏。(当然threadlocal本身也有一些优化,在调用它的get,set方法时会把无直接引用的value释放掉,但是假如一直不调用get,set方法,还是会内存泄漏)

  • 相关阅读:
    常用的npm指令总结
    Mongoose基础
    2016总结与展望
    sleep与wait的区别
    查询平均分大于80分的学生
    求最大不重复子串
    快速排序
    按位与(&)运算的作用
    异或运算的作用
    java 字符串中的每个单词的倒序输出
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13509969.html
Copyright © 2011-2022 走看看