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()){ // 执行代码 // ............ 代码 } }
浙公网安备 33010602011771号