参考视频:https://space.bilibili.com/1578320?spm_id_from=333.788.b_765f7570696e666f.2

             up主: 寒食君  ,这是一个很有意思的up主, 大家可以去点赞关注他.

 

什么是锁?

  在并发环境下,多个线程会对同一个资源进行争抢. 那么可能就会造成数据不一致的情况.为了解决这个问题,很多语言引入了锁机制.

Java锁机制_多语言

  

 

 

锁是一种抽象的概念.. 那么在代码层面,锁究竟是如何实现的?

   在java中,每个Object对象都有一把锁. 这把锁存放在对象头中.锁中记录了当前对象被哪个线程占用.

 

java对象包含三个部分,如下

  对象头,实例数据,填充字节

Java锁机制_java_02

  对象头又分为 : Mark word 和 Class Point.

      Class Point是一个指针. 它指向了当前对象类型所在方法区中的类型数据.

       Mark word存储了很多和当前对象运行时状态有关的数据. 如下

Java锁机制_java_03

 

线程和轻量级锁的绑定

Java锁机制_java对象_04

Synchronized在Java中可以用来同步线程. Synchronized被编译后会生成monitorenter和monitorexit两个字节码指令.

Java锁机制_java_05

  

当一个对象被一个线程占用,其他想获取这个对象的线程就会发生自旋.

Java锁机制_java_06

 

monit依赖于操作系统的mutex lock实现的.  

java线程实际上是对操作系统线程的映射.

从jdk6,锁分为了    无锁,偏向锁,轻量级锁,重量级锁.  锁只能升级.

 

Java锁机制_多语言_07