synchronized加锁对象和JVM对锁的优化
synchronized加锁对象
对于普通同步方法,锁是调用该方法的对象。
对于静态同步方法,锁是该方法所属类的Class对象。
对于同步代码块,锁是synchronized括号里面的对象。
JVM对锁的优化
偏向锁
如果一个线程获得锁,那么锁就进入偏向模式。当这个线程再次请求锁时,不执行同步操作。
轻量级锁
如果偏向锁失败,采用轻量级锁:对象头部作为指针,指向线程堆栈的内部,判断当前线程是否持有对象锁。如果线程获得轻量级锁,则进入临界区;否则,锁请求膨胀为重量级锁。
自旋锁
当前线程执行几个空循环。
锁消除
逃逸分析即观察某个变量是否会逃出某个作用域,消除不可能竞争共享资源的锁。