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方法,还是会内存泄漏)

  • 相关阅读:
    QR码与DM码的对比
    JBPM在Eclipse中运行时页面错误ProcessEngine cannot be resolved to a type
    C. A Mist of Florescence
    B. A Tide of Riverscape
    A. A Blend of Springtime
    A. Gennady the Dentist
    D. Lizard Era: Beginning
    E. Jzzhu and Apples
    D. Jzzhu and Cities
    C. Jzzhu and Chocolate
  • 原文地址:https://www.cnblogs.com/fcb-it/p/13509969.html
Copyright © 2011-2022 走看看