ThreadLocal简介

    /**
     * 该Map是ThredLocal里面的数据结构,但是是存储在Thread 类中
     *
     * **/
    static class ThreadLocalMap {

        static class Entry extends WeakReference<ThreadLocal<?>> {
            /**
             * The value associated with this ThreadLocal.
             */
            Object value;

            /***
             * key: 只有ThreadLocal 本身是强引用(static 修饰)的时候, Entry中Key 才不能为null,
             *
             */
            Entry(ThreadLocal<?> k, Object v) {
                super(k);
                value = v;
            }
        }

    }

    /**
     * ThreadLocal建议: 使用 private static final 修饰
     * <p>
     * <p>
     * 强引用的ThreadLocal , 那么每次基本上都可以根据key找到对应的SimpleDateFormat,不会出现查找不到。
     * 如果Thread 声明周期结束了,那么实例对象也会被销毁。
     **/
    private static final ThreadLocal<SimpleDateFormat> SIMPLE_DATE_FORMAT_THREAD_LOCAL = new ThreadLocal<SimpleDateFormat>() {
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("yyyymmdd HH:mm:sss");
        }
    };


    public static void testThreadLocal() {
        /**
         *
         * 声明为局部的话,访问该方法的线程都会存储一份SimpleDateFormat实例,
         * ThreadLocalMap.Entry中的key 是WeakReference类型,导致出了作用域(该方法执行结束) key 就为null , value 就无法立即回收, 可能会出现内存泄露的风险,
         * 在使用完成后,调用remove方法可以解决内存泄露的风险
         * */
        ThreadLocal<SimpleDateFormat> simpleDateFormatThreadLocal = new ThreadLocal<SimpleDateFormat>() {
            @Override
            protected SimpleDateFormat initialValue() {
                return new SimpleDateFormat("yyyymmdd HH:mm:sss");
            }
        };

        try {
            SimpleDateFormat sdf = simpleDateFormatThreadLocal.get();
            System.out.println(sdf.format(new Date()));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            /**
             *
             * ThreadLocal 中的get() set()  remove() 方法都有可能会执行到将Entry[] <Key,Value> 中key==null的删除掉。
             *
             * **/
            simpleDateFormatThreadLocal.remove();
        }
        
    }
posted @ 2019-07-03 20:26  IT小工~  阅读(169)  评论(0编辑  收藏  举报