1、synchronized(对象锁)采用互斥的方式让同一时刻 最多只有一个线程获取到对象锁

2、底层是由Monitor实现的,是JVM级别的对象

3、Monitor内部有Owner、EntryList、WaitSet三个属性

在这里插入图片描述

4、流程

如果来了一个线程,先检查Owner是否为null,如果为null,则让当前线程持有,如果不为null,则该线程去EntryList中去等待(阻塞),如果持有锁的线程调用了wait方法,则会进入WaitSet

5、Monitor重量级锁

Lock对象是怎么关联上的Monitor呢?

每个Java对象都可以关联一个Monitor对象,如果用synchronized给对象上锁(重量级锁)后,该对象头的MardWord就被设置指向Monitor对象的指针

5.1对象的内存结构:

对象头、实例数据、对齐填充

5.2MarkWord:

在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐