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为每一个线程提供了一个变量副本,保证同一时间内只有一个线程去访问数据。

基于html+python+Apriori 算法、SVD(奇异值分解)的电影推荐算法+源码+项目文档+算法解析+数据集,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 电影推荐算法:Apriori 算法、SVD(奇异值分解)推荐算法 电影、用户可视化 电影、用户管理 数据统计 SVD 推荐 根据电影打分进行推荐 使用 svd 模型计算用户对未评分的电影打分,返回前 n 个打分最高的电影作为推荐结果 n = 30 for now 使用相似电影进行推荐 根据用户最喜欢的前 K 部电影,分别计算这 K 部电影的相似电影 n 部,返回 K*n 部电影进行推荐 K = 10 and n = 5 for now 根据相似用户进行推荐 获取相似用户 K 个,分别取这 K 个用户的最喜爱电影 n 部,返回 K*n 部电影进行推荐 K = 10 and n = 5 for now Redis 使用 Redis 做页面访问次数统计 缓存相似电影 在使用相似电影推荐的方式时,每次请求大概需要 6.6s(需要遍历计算与所有电影的相似度)。 将相似电影存储至 redis 中(仅存储 movie_id,拿到 movie_id 后还是从 mysql 中获取电影详细信息), 时间缩短至:93ms。 十部电影,每部存 top 5 similar movie 登录了 1-6 user并使用了推荐系统,redis 中新增了 50 部电影的 similar movie,也就是说,系统只为 6 为用户计算了共 60 部电影的相似度,其中就有10 部重复电影。 热点电影重复度还是比较高的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值