Java锁的粗化及消除

/**
     * 在Java的逃逸分析中 sbf 在线程调用的时候会将线程粗化
     * 什么是线程粗化:就是每一个append方法的时候都会加一把锁,那么在粗化后  将锁锁住所有的append
     */
    public static void testLockCoarsening(){

        StringBuffer sbf = new StringBuffer();
        //  逃逸分析之前 执行时是这样的
        synchronized (sbf){
            sbf.append("1");

        }
        synchronized (sbf){
            sbf.append("2");
        }
        // ================

        // 逃逸分析之后 就是这么个意思
        synchronized (sbf){
            sbf.append("1");
            sbf.append("2");
        }
    }

============  锁的消除

/**
     * 此方法会将锁消除  因为  不会被其它线程引用  并且 去执行的时候 也是在当前线程中
     */
    public static void testLockEliminate(){
        synchronized (new Object()){
            //  执行代码
            // ............  代码
        }
    }

 

posted @ 2020-05-17 22:13  TT007  阅读(439)  评论(0)    收藏  举报