#千锋逆战

一、synchronized的底层原理

jdk6之前是互斥的死锁,即后续的线程会进入阻塞(系统调用切换线程导致性能降低),jdk6之后锁优化

有了偏向锁、轻量级锁、重量级锁、,由偏向锁逐步升级优化同步。

1、偏向锁

对象头(存着两部分内容)1、存着运行时的数据结构 2、存着方法区中对象的类型数据指针

当有线程访问锁时,锁的threadid会cas的操作尝试将线程的id记录到自己的运行时数据结构中,一旦cas操作成功则

虚拟机不再进行任何同步操作。cas操作不成功则说明有线程和它争抢锁则升级为轻量级锁。

2、轻量级锁

在线程的栈帧中建立一个锁的空间,cas的操作去锁的对象头中更新运行时数据到栈帧中的锁的空间,一旦操作成功则进行同步代码块操作,没有成功则说明有线程和它竞争。则检查对象头中的运行时数据是否指向当前栈帧。如果是则表明已经获得锁执行同步操作。

3、重量级锁

互斥锁,即为死锁,后续的线程都会进入阻塞状态。

二、synchronized如何保证可见性的

因为sychronized保证共享变量每次只有一个线程进行操纵,保证对共享变量的原子性。也就保证了共享变量的可见性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,284评论 0 2
  • TWU(ThoughtWorks University)是公司的培训项目,每年全球的招聘的毕业生会在这里接收进行技...
    goxplanet阅读 581评论 0 2
  • 1 客观评价自我 儿子的数学成绩一向很好,可是经常沾沾自喜,认为自己在数学方面很有天份,可是最近有几次考得不太理想...
    我是红山果阅读 128评论 0 0
  • 瞧瞧都是人才 如果你笑了,请高抬贵手关注我吧!谢谢(*°∀°)=3
    蚩梦_9de8阅读 177评论 0 1
  • 李想是一个超级阳光乐天派的女生,喜欢哈哈哈大笑,跟着李想一起工作是一件超级快乐的事情。第一份工作就是统计报废,从生...
    AdelaZhou阅读 387评论 0 1

友情链接更多精彩内容