分类 | 被锁对象 | 代码 | 说明 |
---|---|---|---|
方法 | 实例方法 | public synchronized void method(){} | 1. 锁住的是该类的实例对象 2. 相同实例对象在不同线程中调用方法 会同步 3. 不同实例对象在不同线程中调用 不会同步 |
方法 | 静态方法 | public static synchronized void method(){} | 1. 锁住的是该类的类对象 2. 相同/不同实例对象在不同线程中调用方法 都会同步 |
代码块 | 实例对象 | synchronized(this){} | 1. 锁住的是该类的实例对象 2. 相同实例对象在不同线程中调用方法 会同步 3. 不同实例对象在不同线程中调用 不会同步 |
代码块 | 类对象 | synchronized(Demo.class){} | 1. 锁住的是该类的类对象 2. 相同/不同实例对象在不同线程中调用方法 都会同步 |
代码块 | 任意对象 | String lock;synchronized(lock){} | 1. 锁住的是lock变量2. 如果lock是对象变量,则参考实例对象逻辑 3. 如果lock是类变量,则参考类对象实例 |