类锁、对象锁、互斥锁与synchronized

时间:2022-02-18 20:10:33

本文总结自: https://blog.csdn.net/luckey_zh/article/details/53815694

互斥锁: 若对象有互斥锁,则在任一时刻,只能有一个线程访问对象。类锁、对象锁都属于对象监视器,而对象监视器是基于互斥锁的。

对象监视器,详见: https://www.cnblogs.com/yanze/p/9774388.html

类锁、对象锁层次: java层次

类锁即锁住了类,对象锁即锁住实例对象

synchronized使用场景分以下几种:

1. 一般方法

对象锁,锁住当前对象

2. 静态方法

类锁,锁住此类

3. synchronized(object)

锁住object,object可为对象,可为类

常见:

synchronized(this)

对象锁

synchronized(*.class)

类锁

锁的本质:

逻辑上来说,锁其实是对象内存堆中头部的一部分数据。当线程获得一个锁,即是在锁内存区域设置一些标志。线程释放锁也是改变这些标记。