ThreadLocal自理解

本文深入探讨了ThreadLocal在Java中的应用,通过实例演示了如何使用ThreadLocal来为每个线程提供独立的变量副本,避免了线程间的变量冲突,确保了数据的安全性和线程的独立性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Message{
 private String note;
 public void setNote(String note) {
  this.note = note;
 }
 public String getNote() {
  return note;
 }
}
class MessageConsumer{
 public void print(Message msg) {// Consumer 必须明确接收 Message类的对象
  System.out.println(Thread.currentThread().getName()+"="+MyUtil.get().getNote());
 }
}
class MyUtil{
 private static ThreadLocal<Message> threadLocal =new ThreadLocal<Message>();
 public static void set(Message msg) {
  threadLocal.set(msg);
 }
 public static Message get() {
  return threadLocal.get();
 }
}
public class TestDemo{
 public static void main(String[] args) throws Exception{
  new Thread(()-> {
   Message msg=new Message();
   msg.setNote("hello");
   MyUtil.set(msg);
   new MessageConsumer().print(msg);},"user1").start();
   
  new Thread(()-> {
   Message msg=new Message();
   msg.setNote("Morrnig");
   MyUtil.set(msg);
   new MessageConsumer().print(msg);},"User2").start();
 }
}

这是在MLDN上敲下来的代码,具体实现的是将USER1与USER2 的线程区分开,做到User1 绑定输出Hello,User2绑定输出Morning,关于ThreadLocal 的一些学习笔记如下
ThreadLocal 用于保存某个线程共享变量,在例子中,User1和User2都是利用的msg 作为变量名称的,也即共享变量名称。对于同一个Static ThreadLocal 不同线程只能从set、get、remove中获取自己的变量,而且不影响其他的线程,
set 的作用是设置当前线程共享变量的值,get即获取共享变量的值,remove 为移除。
在共性变量
Thread.Threadlocal<ThreadLocal,Object>;
Thread 表示当前线程, ThreadLocal 是Static ThreadLocal变量。 Object(Message)是为当前进程的共享变量。可以根据当期的ThreadLocal获取当前线程共享变量Object
总的来说ThreadLocal为每一个线程提供了一个变量副本,保证同一时间内只有一个线程去访问数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值