1、什么是锁
在并发环境下,多个线程对同一个资源进行争抢,可能会导致数据不一致的问题,为了解决这个问题,很多编程语言都引入了锁机制。通过一种抽象的锁来对资源进行锁定。
2、对象的组成
每个对象都有一把锁,这把锁存放在对象头中。这就得说到对象的结构了,对象由对象头、实例数据和填充字节组成(如图),对齐填充字节是为了满足“Java对象的大小必须是8比特的倍数”这一条街设计的,实际上是一些无用字节。
对象头就是锁机制中比较重要的部分了,对象头分为Mark Word和Class Point。
Class Point就是一个指针,它指向了当前对象类型所在方法区中的类型数据。
Mark Word存储了很多和当前对象运行时状态有关的数据。比如说:hashcode、锁状态标志、指向所记录的指针等等。