前言
- synchronized(this) 与 synchronized(class) 相同处:均对代码加锁,实现互斥性。
- synchronized(this) 与 synchronized(class) 区别:作用域不同。
synchronized (this)
synchronized(this)
使用的是对象锁。this
为关键词,表示当前对象。
同样使用对象锁的写法有synchronized(obj)
。
在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。
对象是类的实例,一个类对应N多对象。使用对象锁时,对象相同时,互斥;对象不同时,不互斥。
public void xxx() {
synchronized (this) {
// 加锁区域
...
}
}
synchronized (class)
synchronized(this)
使用的是类锁。
public void xxx() {
synchronized (xxxxx.class) {
// 加锁区域
...
}
}
在 Java 中,一个类只有一个锁,可以称为“类锁”。使用类锁时,无条件的互斥。
synchronized 修饰方法
synchronized 修饰方法时,使用的是对象锁。
public synchronized void xxx() {
// 加锁区域
...
}
synchronized 修饰静态方法
synchronized 修饰静态方法,使用的是类锁。
public synchronized static void xxxx() {
// 加锁区域
...
}
参考
https://www.cnblogs.com/huansky/p/8869888.html