多线程高并发下 引入的关键字 ThreadLocal

学习目标:

首先要明确 :线程安全问题都是由全局变量及静态变量引起的。
在多线程高并发的场景下,为了使得各个线程能够安全的按照程序员预想的方式运行,需要使用一些关键字来达成。
今天要讲的就是其中两个重要的关键字,ThreadLocal和volatile。

例如:

  • 一周掌握 Java 入门知识

ThreadLocal:

在这里插入图片描述
在这里插入图片描述
如上图所示,多线程运行之初,实例化了一个公共对象 MyDemo01,并且完成了实例化,接着各个线程要操作这个公共对象 demo,把自己的线程名称存入到demo中,随后再把该值输出出来,这样一个流程。

不使用ThreadLocal和synchronized出现的问题

多个线程同时运行的情况下,由于资源没有上锁,所以可能出现第一个线程,刚刚设置了demo的cotent值,在输出之前,就被第二个线程重新设置content值给覆盖掉了,导致线程1输出的结果是线程2的名称。

使用synchronized出现的问题

在多线程同时运行的情况下,给资源加锁,这时候,每次给demo设置值的时候,只会有一个线程接近资源,也只有一个线程来输出,只有该线程执行完资源的时候,才会释放锁,此时才会有下一个线程来得到锁,从而拿到资源。
确实是解决了,线程不安全的问题,但是每次线程只能排队来获取资源,这样特别影响性能。

使用ThreadLocal

在多线程同时运行的情况下,使用ThreadLocal 这个空间,它是属于线程私有的一个空间,这样的话,首先资源可以在高并发的情况下被多个线程使用,并且ThreadLocal的线程隔离性,也保证了线程安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值