多线程JUC 第2季 锁的消除与锁粗化(了解)

一 锁消除

1.1 锁消除

从JIT角度看,相当于无视它,synchronized(o)不存在,这个对象并没有被共用扩散到其它线程使用,极端的说就是根本没有加这个锁对象的定成机器码,消除了锁的使用。

1.2 代码

1.

package com.ljf.haha;

/**
 * @ClassName: LockDrop
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/17 11:38:51 
 * @Version: V1.0
 **/
public class LockDrop {
    static Object objectlock=new Object();
    public void info(){
        Object o=new Object();
        synchronized (o){
            System.out.println("o的hashcode:"+o.hashCode()+"  objectlock hashcode:"+objectlock.hashCode());
        }
    }
}

2.执行 

package com.ljf.haha;

/**
 * @ClassName: TestClear
 * @Description: TODO
 * @Author: admin
 * @Date: 2023/09/17 11:42:56 
 * @Version: V1.0
 **/
public class TestClear {
    public static void main(String[] args) {
        LockDrop lockDrop=new LockDrop();
        for (int k=0;k<10;k++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    lockDrop.info();
                }
            },"A"+k).start();
        }
    }
}

3.执行结果

多线程JUC 第2季 锁的消除与锁粗化(了解)_第1张图片

二 锁粗化 

2.1 锁粗化

锁粗化:假如方法中收尾相接,前后相邻的都是同一个锁对象,那JIT编译器就会把这几个synchronized块合并成也给大块,加粗加大范围,一次申请锁使用即可,避免此次的申请和释放锁,提升了性能。

多线程JUC 第2季 锁的消除与锁粗化(了解)_第2张图片

你可能感兴趣的:(高并发多线程,java,开发语言)