synchronized 中的 4 个优化,你知道几个?(2)

简介: synchronized 中的 4 个优化,你知道几个?(2)

3.锁粗化


锁粗化是指,将多个连续的加锁、解锁操作连接在一起,扩展成一个范围更大的锁


我只听说锁“细化”可以提高程序的执行效率,也就是将锁的范围尽可能缩小,这样在锁竞争时,等待获取锁的线程才能更早的获取锁,从而提高程序的运行效率,但锁粗化是如何提高性能的呢?


没错,锁细化的观点在大多数情况下都是成立了,但是一系列连续加锁和解锁的操作,也会导致不必要的性能开销,从而影响程序的执行效率,比如这段代码:


public String method() {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10; i++) {
        // 伪代码:加锁操作
        sb.append("i:" + i);
        // 伪代码:解锁操作
    }
    return sb.toString();
}


这里我们不考虑编译器优化的情况,如果在 for 循环中定义锁,那么锁的范围很小,但每次 for 循环都需要进行加锁和释放锁的操作,性能是很低的;但如果我们直接在 for 循环的外层加一把锁,那么对于同一个对象操作这段代码的性能就会提高很多,如下伪代码所示:


public String method() {
    StringBuilder sb = new StringBuilder();
    // 伪代码:加锁操作
    for (int i = 0; i < 10; i++) {
        sb.append("i:" + i);
    }
    // 伪代码:解锁操作
    return sb.toString();
}


锁粗化的作用:如果检测到同一个对象执行了连续的加锁和解锁的操作,则会将这一系列操作合并成一个更大的锁,从而提升程序的执行效率

相关文章
|
5月前
|
存储 安全 Java
Synchronized 优化
Synchronized 优化
|
5月前
|
Java 编译器
synchronized原理
synchronized原理
|
5月前
|
存储 安全 Java
Synchronized锁工作原理
Synchronized锁工作原理
|
10月前
|
Java
【多线程】synchronized的特性
【多线程】synchronized的特性
|
Java
synchronized 关键字对于锁的一些优化
synchronized 关键字对于锁的一些优化
59 0
|
Java 编译器
synchronized关键字(作用 + 特点 + 锁升级 + 锁优化 + 与 volatile 对比)
1. synchronized 的作用 1)保证原子性 2)保证内存可见性 3)保证有序性 2. synchronized 特点 3. 锁升级的过程 1)偏向锁 2)轻量级锁 3)重量级锁 4. 锁的优化操作 1)锁消除 2)锁粗化 5. synchronized 使用示例 1)修饰普通方法:锁当前实例对象 2)修饰静态方法:锁当前类对象 3)修饰代码块:指定锁哪个对象 6. volatile 的作用 1)保证内存可见性 2)保证有序性 7. synchronized 和 volatile 的区别
97 0
synchronized关键字(作用 + 特点 + 锁升级 + 锁优化 + 与 volatile 对比)
|
存储 Java
synchronized锁升级原理
synchronized锁升级原理
257 1
synchronized锁升级原理
|
SQL 缓存 安全
synchronized和volatile底层原理分析
CAS Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁 因为经常配合循环操作,直到完成为止,所以泛指一类操作 cas(v, a, b)
89 0
|
存储 设计模式 缓存
synchronized原理剖析
synchronized原理剖析
|
安全 Java 对象存储
浅谈synchronized锁原理
保证线程安全的一个重要手段就是通过加锁的形式实现,今天盘点一下Java中锁的八股文
150 0