synchronized的底层原理

synchronized七种场景应用总结
1 两个线程同时访问一个对象的同步方法
(首先是同一个对象,并且是同步方法,这属于对象锁中的普通同步方法锁,效果是线程顺序执行)

2 两个线程访问的两个对象的同步方法
(访问不同的对象,如果要实现同步的话,锁的级别应该到类锁,但题中是同步方法,属于对象级别的,所以,不同对象不受干扰,线程并行运行)

3 两个线程访问的是synchronized静态方法
(锁的级别是类锁,不管是不是同一个对象,线程都是顺序同步执行)

4 同时访问同步方法和非同步方法
(一个线程访问同步方法,一个线程访问非同步方法,两者是否受影响?synchronized影响范围是它修饰的方法体,对其它方法不受影响,结论就是非同步方法不受影响,该怎么运行还怎么运行,即使修饰的是静态方法,也不受影响,因为锁类型不同)

5 访问同一个对象的不同的普通同步方法
(锁类型相同 所以,同一个对象的线程访问两个方法是受影响的,顺序执行,不会并行的)

6 同时访问静态synchronized方法和非静态synchronized方法
(只要两个线程的锁类型相同,就是同步,不相同,则并行,不受干扰)
延伸一下:两个都是静态方法呢?由于都是类锁,不管线程是不是一个对象的,都是顺序执行
synchronized的底层原理
7 方法抛异常后是否会释放锁 (会自动释放锁)

synchronized源码分析

扒一扒synchronized的原理

synchronized的底层原理
synchronized底层实现原理&CAS操作&偏向锁、轻量级锁,重量级锁、自旋锁、自适应自旋锁、锁消除、锁粗化