ThreadLocal value access across different threads

前端 未结 5 1067
南笙
南笙 2020-12-09 19:29

Given that a ThreadLocal variable holds different values for different threads, is it possible to access the value of one ThreadLocal variable from another thread?

5条回答
  •  清歌不尽
    2020-12-09 20:01

    I wanted to see what was in ThreadLocal storage, so I extended the above example to show me. Also handy for debugging.

                Field field = Thread.class.getDeclaredField("threadLocals");
                field.setAccessible(true);
                Object map = field.get(Thread.currentThread());
                Field table = Class.forName("java.lang.ThreadLocal$ThreadLocalMap").getDeclaredField("table");
                table.setAccessible(true);
                Object tbl = table.get(map);
                int length = Array.getLength(tbl);
                for(int i = 0; i < length; i++) {                   
                    Object entry = Array.get(tbl, i);
                    Object value = null;
                    String valueClass = null;
                    if(entry != null) { 
                        Field valueField = Class.forName("java.lang.ThreadLocal$ThreadLocalMap$Entry").getDeclaredField("value");
                        valueField.setAccessible(true);
                        value = valueField.get(entry);
                        if(value != null) {
                            valueClass = value.getClass().getName();
                        }
                        Logger.getRootLogger().info("[" + i + "] type[" + valueClass + "] " + value);
                    }
                }
    

提交回复
热议问题