首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

【JAVA 进阶之锁机制】synchronized 的锁升级-持续更新....

1、synchronized 的基本认识 场景:Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchronized关键字就是用于代码同步。什么情况下会数据不安全呢,要满足两个条件:一是数据共享(临界资源),二是多线程同时访问并改变该数据。 在多线程并发编程中 synchronized 称呼为重量级锁。但是,随着 Java SE 1.6 对 synchronized 进行了各种优化之后,有些情况下它就并不那么重,Java SE 1.6 中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁。 1.1 synchronized 有三种方式来加锁 1.1.1. 修饰实例方法,作用于当前实例加锁,进入同步代码前 要获得当前实例的锁 1.1.2. 静态方法,作用于当前类对象加锁,进入同步代码前要 获得当前类对象的锁 1.1.3. 修饰代码块,指定加锁对象,对给定对象加锁,进入同 步代码库前要获得给定对象的锁。 1.2 Mark word Mark word 记录了对象和锁有关的信息,当某个对象被 synchronized 关键字当成同步锁时,那么围绕这个锁的一 系列操作都和 Mark word 有关系。Mark Word 在 32 位虚 拟机的长度是 32bit、在 64 位虚拟机的长度是 64bit。 Mark Word 里面存储的数据会随着锁标志位的变化而变化, Mark Word 可能变化为存储以下 5 中情况

03
领券