在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。为什么重量级锁的效率低呢?
- 主要是因为重量级锁需要在内核态和用户态之间进行切换
什么时候会进行内核态和用户态的切换?
进行了什么优化?
- Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。
底层的实现原理是什么?
- synchronized 同步代码块是通过monitorenter和monitorexit这一对指令来保证的
package com.nevada.Buffer;
/**
* @author linyuan
* @description ProtoBuf 简单示例
*/
public class Test1 {
public int i;
public void test(){
synchronized (this){
i++;
}
}
}
- synchronized 同步方法主要是通过调用指令读取运行时常量池中方法的 ACC_SYNCHRONIZED 标志来隐式实现的
package com.nevada.Buffer;
/**
* @author linyuan
* @description ProtoBuf 简单示例
*/
public class Test1 {
public static int i;
public static synchronized void test(){
i++;
}
}
知道WaitSet和EntryList吗?什么时候进入