JUC学习:什么是线程安全

什么是线程安全?

其实线程安全指的也就是内存安全,操作系统里面会有很多进程,为了保证安全,操作系统会为这些进程分配各自的内存,每个进程就只能访问自己的那部分内存,而这个内存就叫堆内存。但每个进程里面可能又有许多的线程,为了安全也会为它们分配一个自己的内存,这个内存就叫栈内存。

而现实场景中不可能每个线程都只访问栈内存,有部分变量就需要放到一个公共空间里面,但如何保证这个公共空间资源的安全呢?

解决方案以下几种,

  • 局部变量

直接放到每个线程的栈内存中

  • 就是资源复制多几份给每个线程都能分到一份一样的资源,

其实也就是ThreadLocal类。从逻辑上讲应该好像是在栈内存里面,但这些一样的资源其实还是在堆内存里面。

  • 把这个资源设置为只能看,不能摸:

其实就是常量或只读变量,不能修改,那么这个资源肯定会是安全的

  • 使用互斥锁

  • 使用CAS(会存在ABA问题)

因为锁的获取和释放是要花费一定代价的,如果在线程数目特别少的时候,可能根本就不会有别的线程来操作数据,此时你还要获取锁和释放锁,可以说是一种浪费,所以就可以使用CAS提高性能

总结

前两种属于隔离法,一个是位置隔离,一个是数据隔离。

然后两种是标记法,一个是只读标记,一个是加锁标记。

最后一种是大胆法,先来怼一把试试,若不行从头再来。

参考:https://mp.weixin.qq.com/s?__biz=MzAwNDA2OTM1Ng==&mid=2453140919&idx=1&sn=33c1d972afd3476cd78971b372d59d56&scene=21#wechat_redirect

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值