• ThreadLocal


    ThreadLocal

    ThreadLocal 是 jdk1.8及之后版本的API

    从名字我们就可以看到ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

    对象创建

    格式:

    private static ThreadLocal<User> threadLocal = new ThreadLocal<>();

    创建此对象需要一个泛型, 来指定ThreadLocal可以存储的数据, 如果需要存储多个数据, 泛型变量可以使用Map类型

    核心方法

    返回值 方法 说明
    void set(T value) 存入数据
    T get() 获取数据
    void remove() 清除数据

    实际应用

    例如在springboott的同一次请求中, 使用同一个ThreadLocal对象在Controller中set一个数据, 可以在service中获取到这个数据

    封装工具类

    单个对象

    例如只能存User对象

    public class UserThreadLocal {
    
        // 1. 定义本地线程对象
        private static ThreadLocal<User> threadLocal = new ThreadLocal<>();
    
        // 2. 定义数据新增的方法
        public static void set(User user) {
            threadLocal.set(user);
        }
    
        // 3. 获取数据
        public static User get() {
            return threadLocal.get();
        }
    
        // 4. 移除方法 使用threadLocal时切记将数据移除,
        // 否则极端条件下, 容易产生内存泄露的风险
        public static void remove() {
            threadLocal.remove();
        }
    
    }
    

    多个对象

    使用map存储多个数据

    public class ThreadLocalUtil {
        
    	private static ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<>();
    
        static {
            threadLocal.set(new HashMap<String, Object>());
        }
    
        public static void set(String key, Object value) {
            threadLocal.get().put(key, value);
        }
    
        public static Object get(String key) {
            return threadLocal.get().get(key);
        }
    
        public static void remove() {
            threadLocal.remove();
        }
    
    }
    
  • 相关阅读:
    金融大数据行业应用及发展全洞察
    金融大数据行业应用及发展全洞察
    R语言-组间差异的非参数检验
    R语言-组间差异的非参数检验
    互联网,将从内部颠覆企业管理模式
    GitHub使用教程
    sublime text3编辑器经常使用快捷方式
    webpy学习笔记之中的一个
    浏览器的重绘和重排的影响
    《Java并发编程实战》第九章 图形用户界面应用程序界面 读书笔记
  • 原文地址:https://www.cnblogs.com/zpKang/p/13553242.html
Copyright © 2020-2023  润新知