当前位置: 首页 > news >正文

ThreadLocal——简单使用

ThreadLocal定义

       ThreadLocal 它为每个使用该变量的线程都提供了一个独立的副本,从而每个线程都可以独立地读取、修改自己的副本,从而实现线程级别的数据隔离。适用于在多线程环境下,各线程需要拥有独立变量副本场景。

ThreadLocal使用场景和使用方法

使用场景主要分为两种

一是将线程不安全的工具类,通过ThreadLocal的形式,转变为线程安全的工具类,在线程中使用,如SimpleDateFormat类。

二是定义线程独立的变量副本,实现线程级别的隔离。如不同线程能读取不同的用户信息,不同线程能读取不同的数据库连接池。

使用方法

在第一种场景下(以SimpleDateFormat为例):

  1. 可以定义一个新工具类,创建一个新的ThreadLocal对象,并重写initialValue 方法;
  2. 设置响应的方法,通过get()方法获取ThreadLocal变量副本

代码示例:

public class DateUtils {
   
public static final ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>() {
       
protected SimpleDateFormat initialValue() {
           
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
    };

   
public static Date parseDate(String stringDate) throws Exception {
       
return threadLocal.get().parse(stringDate);
    }
}

在第二种场景下(以获取用户信息为例):

创建一个新的ThreadLocal对象,通过set()方法,将用户信息放入ThreadLocal变量副本,然后通过get()方法,获取对应的用户信息。通过remove()方法,清除ThreadLocal变量。

代码示例:

public class FeginUser{
   
public static final ThreadLocal<User> threadLocal = new ThreadLocal<User>();

   
public static void setUser(User user){
       
threadLocal.set(user);
    }
   
public static User getUser(){
       
return threadLocal.get();
    }
}


http://www.mrgr.cn/news/52084.html

相关文章:

  • 箭头函数语法及书写规则。
  • AI产品经理:你更适合哪一种?
  • 泛微OA移动引擎中调用手机扫码后跳转另外页面(资产盘点)
  • 是时候扔掉你的密码了
  • 杭州威雅学校:中国橄榄球国家队到访助力杭州威雅校队新赛季之旅
  • 开发一个微信小程序要多少钱?
  • 双十一有哪些必买的好物清单?精选五款双11值得买的好物推荐
  • Quarto ppt模板制作与Rstudio git连接
  • JavaWeb环境下的Spring Boot在线考试系统开发
  • 尚硅谷redis 第97节 redisTmplate下答疑
  • springboot图片上传到本地
  • art虚拟机中的gcroot
  • 证明一个特定形式的函数在其三个正根中,两个较小根处的导数之和小于零
  • 北京十大取保候审律师事务所有哪些
  • Linux 命令 chown 和 chmod 的区别
  • 进行SEDEX认证需要准备哪些资料?
  • Java中Dom4j的配置与使用详细解析
  • 为什么k8s不支持docker-kubernetes
  • 【ArcPy】在pycharm中调试arcpy工具代码
  • c语言库文件