Syncronized同步关键字为什么是线程安全的?

本文探讨了Java中的synchronized关键字为何能确保线程安全。从对象在内存中的存储格式出发,解释了JVM如何通过监视器锁(Monitor)来实现线程锁定,并介绍了锁升级的过程,即从偏向锁到轻量级锁再到重量级锁(Synchronized)的转变。
摘要由CSDN通过智能技术生成

前言
java中锁的类型有多种多样,有自旋锁,悲观锁,独享锁,可重入锁,不可重入锁,公平锁和非公平锁等。这些锁的存在都是视图为当前线程争夺cpu资源而存在。其中,几种重要的锁的实现方式有:synchronized,ReentrantLock,ReentrantReadWriteLock等,今天我们来探讨其中一种,为什么synchronized是线程安全的。

对象在内存中的存储格式如下图所示:
在这里插入图片描述
java中每个对象都对应有一个监视器锁(Monitor),在jvm中,每个对象的存储都是有一定的存储格式,如下图所示:
在这里插入图片描述
在对象生成时,jvm就会制定出该对象在内存中的存储结构:
在这里插入图片描述
如果该对象被某个线程锁定,则通过修改jvm中对象存储结构上的某个字段信息来标记该对象已经被锁定,此时,锁进入,当该线程执行完成,锁退出。通过CAS(compare and swap)比对线程id,如果线程id一致则继续当前线程执行,如果不一致,则等待。当有多个线程争抢同一把锁时,则会进行锁的升级,形成由偏向锁–>轻量级锁–>重量级锁(Sync

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值