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}
        }
  • 相关阅读:
    centos安装rvm报错@curl -L get.rvm.io | bash -s stable fails on cent OS
    linux命令 环境设置 顺序
    mysql-5.7.20基本用法
    gitlab&Jenkins 详细介绍及其应用
    git 详细部署及其应用
    zabbix详细介绍及其自动动态发现
    redis 缓存应用
    Linux下rpm、yum和源码三种安装方式详细介绍
    js中获取时间new date()的用法
    Apache Tomcat/8.5.56 启动命令行中文乱码
  • 原文地址:https://www.cnblogs.com/bevis-byf/p/12426203.html
Copyright © 2011-2022 走看看