Synchronized的作用
保证在同一时刻最多只有一个线程执行该段代码,以达到保证并行安全的效果。
Synchronized的两个用法
-
对象锁
包括方法锁(默认锁对象为this当前实例对象)和同步代码块锁(自己指定锁对象) -
类锁
指synchronized修饰静态的方法或指定锁为Class对象。
多线程访问同步方法的7种情况
-
两个线程同时访问一个对象的同步方法 (顺序执行)
-
两个线程访问的是两个对象的同步方法 (并行执行)
-
两个线程访问的是synchronized的静态方法 (顺序执行)
-
同时访问同步方法与非同步方法 (非同步方法不受影响)
-
访问同一个对象的不同的普通同步方法 (顺序执行)
-
同时访问静态synchronized和非静态synchronized方法(锁对象不同)
-
方法抛异常后,会释放锁
性质
- 可重入: 同一线程的外层函数获得锁之后,内层函数可以直接再次获取该锁
- 不可中断