目录
一、Synchronized的作用
- 保证同一时刻最多只有1个线程执行 被Synchronized修饰的方法 / 代码,
其他线程 必须等待当前线程执行完该方法 / 代码块后才能执行该方法 / 代码块。
二、 应用场景
保证线程安全,解决多线程中的并发同步问题(实现的是阻塞型并发),具体场景如下:
- 修饰 实例方法 / 代码块时,(同步)保护的是同一个对象方法的调用 & 当前实例对象
- 修饰 静态方法 / 代码块时,(同步)保护的是 静态方法的调用 & class 类对象
三、 原理
- 依赖 JVM 实现同步
- 底层通过一个监视器对象(monitor)完成, wait()、notify() 等方法也依赖于 monitor 对象
监视器锁(monitor)的本质 依赖于 底层操作系统的互斥锁(Mutex Lock)实现
四、 具体使用
Synchronized
用于 修饰 代码块、类的实例方法 & 静态方法
1、使用规则
2、锁的类型 & 等级
-
由于Synchronized 会修饰 代码块、类的实例方法 & 静态方法,故分为不同锁的类型
具体如下:
-
之间的区别
3、使用方式
/**
* 对象锁
*/
public class Test{
// 对象锁:形式1(方法锁)
public synchronized void Method1(){
System.out.println("我是对象锁也是方法锁");
try{
Thread.sleep(500);
} catch (InterruptedException e){
e.printStackTrace();
}
}
// 对象锁:形式2(代码块形式)
public void Method2(){
synchronized