多线程编程笔记2--线程安全的解药:锁

前一篇提到,多线程会有线程安全问题。而解决这个问题的方案,就是本文要讲的:锁

线程安全中最常见的aba问题,其本质原因在于不同的线程对同一个资源有争抢行为,那么自然而然,解决这个问题的方式,就是限制资源的访问权限,对于更新操作,同一时间只允许一个线程访问,就解决了这个问题。

锁的本质:

通过一定的方式,限制某些资源、代码的访问权限,从而实现程序运行结果的一致性、可预测性

具体:

volatile:

只能用于变量,内存可见,通过CPU的lock指令,强制变量不在线程缓存中存储,并在写入值时强制无效多核cpu中其他cpu的相应缓存值,做到强制统一。但可以明显看出这个操作会损失性能

syhronized:

比volatile更重的指令,会限制相应资源(代码块)的访问量,同一时间只会有同一线程执行,从而实现安全。(例如修改变量值,既然同一时间只可能有一个线程修改,那么就不会有安全问题)

锁分类:

类锁,对象锁 乐观锁,悲观锁 可重入锁,不可重入锁 公平锁,非公平锁 单机机锁,分布式锁 自旋锁 分段锁 读写锁

其中的锁分类,只是叫法不同,对应不同的实现、目的,其本质仍是文章开头部分。

另注:命令行查看字节码 javap -v -p Demo.class

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值