zoukankan      html  css  js  c++  java
  • ThreadLocalUtils

    1:  Map版

    package cn.com.util;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Objects;
    
    public class ThreadLocalUtils {
    
        private static ThreadLocal<Map<Object, Object>> RESOURCES;
    
        // 子线程可继承的ThreadLocal
        public static ThreadLocalUtils initInhert() {
            removeResources();
            RESOURCES = new InheritableThreadLocal();
            RESOURCES.set(new HashMap<>());
            return null;
        }
    
        public static void withInitial() {
            removeResources();
            RESOURCES = ThreadLocal.withInitial(() -> new HashMap<>());
        }
    
        public static void removeResources() {
            if (Objects.nonNull(RESOURCES)) {
                RESOURCES.remove();
            }
        }
    
        public static Map<Object, Object> getResources() {
            return RESOURCES.get();
        }
    
        public static void put(Object key, Object value) {
            Objects.requireNonNull(key, "key cannot be null");
            getResources().put(key, value);
        }
    
        public static Object get(Object key) {
            return getResources().get(key);
        }
    
        public static Object remove(Object key) {
            return getResources().remove(key);
        }
    
    }

    测试:

    public static void main(String[] args) throws Exception {
            Map<Object, Object> resources = ThreadLocalUtils.initInhert().getResources();
            resources.put("111","aaa");
            System.out.println(ThreadLocalUtils.getResources());// {111=aaa}
            resources.put("222","bbb");
            System.out.println(ThreadLocalUtils.getResources());// {111=aaa, 222=bbb}
            Thread t = new Thread(() -> {
                Map<Object, Object> resourcesChild = ThreadLocalUtils.getResources();
                resourcesChild.put("333","ccc");
                System.out.println(ThreadLocalUtils.getResources());// {111=aaa, 222=bbb, 333=ccc}
            });
            t.start();
            Thread.sleep(2000L);
            System.out.println(ThreadLocalUtils.getResources());// {111=aaa, 222=bbb, 333=ccc}
        }
  • 相关阅读:
    页面调用百度地图但是使用了https证书之后不显示
    JAVA查询类别(菜单)下的所有子类别(递归)
    summernote富文本的简单使用
    thymeleaf标签在js中调用转义变量与不转义变量写法
    SpringBoot使用@Async实现异步调用
    JAVA使用多线程进行数据处理
    MapReduce-TextInputFormat 切片机制
    BootstrapTable 导出数据
    BootstrapTable 加载数据
    CDN 常用静态资源公共库
  • 原文地址:https://www.cnblogs.com/bevis-byf/p/12426203.html
Copyright © 2011-2022 走看看