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);
            }
        }
  • 相关阅读:
    Docker build Dockerfile 构建镜像
    Docker 容器启动 查看容器状态
    Docker 获取镜像
    Docker 容器状态查看
    windows 检测进程pid
    bzoj 1083 最小生成树
    bzoj 2039 最小割模型
    bzoj 2749 杂题
    bzoj 2748 DP
    bzoj 3190 维护栈
  • 原文地址:https://www.cnblogs.com/frankyou/p/10788885.html
Copyright © 2011-2022 走看看