13 锁消除和锁膨胀

vvEcho 2025-03-01 16:02:22
Categories: Tags:

锁消除

在synchronized修饰的代码中,如果不存在操作临界资源的情况,会触发锁消除,你即便写了synchronized,他也不会触发。

1
2
3
4
public synchronized void method(){
// 没有操作临界资源
// 此时这个方法的synchronized你可以认为木有~~
}

锁膨胀

如果在一个循环中,频繁的获取和释放做资源,这样带来的消耗很大,锁膨胀就是将锁的范围扩大,避免频繁的竞争和获取锁资源带来不必要的消耗。

1
2
3
4
5
6
7
8
9
10
11
12
public void method(){
for(int i = 0;i < 999999;i++){
synchronized(对象){

}
}
// 这是上面的代码会触发锁膨胀
synchronized(对象){
for(int i = 0;i < 999999;i++){
}
}
}