【Java】Java中synchronized关键字的底层原理
·
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:

更多推荐



所有评论(0)