synchronized锁

synchronized 锁

  1. 修饰代码块
  2. 修饰方法

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 实例方法, 对象级别锁
public synchronized void lock1() {
}
// 静态方法,类全局锁
public static synchronized void lock2() {
}

public void lock3(){

// 同类锁
synchronized (this.getClass()) {
// do
}
// 同对象锁
synchronized (this){
// do
}
}

原理

  1. 修饰代码块的时候使用的是通过 monitorentermonitorexit 来获取monitor Object对象进行加、解锁
  2. 修饰方法时通过方法的 ACC_SYNCHRONIZED 标志位来进行锁定

参考

https://zhuanlan.zhihu.com/p/350356657
https://segmentfault.com/a/1190000041259193