zoukankan      html  css  js  c++  java
  • Clean ThreadLocals

    A method to clean ThreadLocal

       private void cleanThreadLocals() {
            try {
                // Get a reference to the thread locals table of the current thread
                Thread thread = Thread.currentThread();
                Field threadLocalsField = Thread.class.getDeclaredField("threadLocals");
                threadLocalsField.setAccessible(true);
                Object threadLocalTable = threadLocalsField.get(thread);
    
                // Get a reference to the array holding the thread local variables inside the
                // ThreadLocalMap of the current thread
                Class threadLocalMapClass = Class.forName("java.lang.ThreadLocal$ThreadLocalMap");
                Field tableField = threadLocalMapClass.getDeclaredField("table");
                tableField.setAccessible(true);
                Object table = tableField.get(threadLocalTable);
    
                // The key to the ThreadLocalMap is a WeakReference object. The referent field of this object
                // is a reference to the actual ThreadLocal variable
                Field referentField = Reference.class.getDeclaredField("referent");
                referentField.setAccessible(true);
    
                for (int i=0; i < Array.getLength(table); i++) {
                    // Each entry in the table array of ThreadLocalMap is an Entry object
                    // representing the thread local reference and its value
                    Object entry = Array.get(table, i);
                    if (entry != null) {
                        // Get a reference to the thread local object and remove it from the table
                        ThreadLocal threadLocal = (ThreadLocal)referentField.get(entry);
                        threadLocal.remove();
                    }
                }
            } catch(Exception e) {
                // We will tolerate an exception here and just log it
                throw new IllegalStateException(e);
            }
        }
  • 相关阅读:
    【源码剖析】HashMap1.7 详解
    友链
    P4747 [CERC2017]Intrinsic Interval
    Educational Codeforces Round 97 简要题解
    CF908D New Year and Arbitrary Arrangement(期望 dp)
    一个方便的自定义注解,管理实体类
    Leetcode 657 机器人能否回到原点
    Leetcode 695 岛屿的最大面积 二维平面DFS
    WebSocket 的简单用例
    俄罗斯方块JAVA
  • 原文地址:https://www.cnblogs.com/frankyou/p/10788885.html
Copyright © 2011-2022 走看看