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);
            }
        }
  • 相关阅读:
    用友U8 | 【出纳管理】出纳日记账生成的凭证如何删除?
    转载--如何为chart上的点添加标注
    转载--跨域请求CORS和jsonp
    转载--闭包的使用场景
    转载--闭包的优缺点
    转载--对称加密与非对称加密
    转载--XSS漏洞原理和利用
    转载--强缓存与协商缓存
    转载--CSS常见布局
    转载--透过浏览器看HTTP缓存
  • 原文地址:https://www.cnblogs.com/frankyou/p/10788885.html
Copyright © 2011-2022 走看看