synchronized关键字锁的对象可以是方法、变量、类和当前实例。synchronized不能被继承,子类将自动去除synchronized关键字(public synchronized void xxx()变为public void xxx())
- 方法
- 同一实例当xxx()方法被访问时,该实例内的任何其它标有synchronized关键字的方法都不能被访问
public synchronized void xxx(){
...
}
- 对于该类的所有实例同一时间只有一个实例可以访问该方法
public synchronized static void xxx(){
...
}
- 变量:变量a获得了同步锁,任何持有a的实例,同一时间只有一个实例可以访问该区块。变量对象锁
synchronized(a){
...
}
- 类:线程到达该区块时,对于类xxx的多有操作包括静态变量和方法都不能操作。类对象锁
synchronized(xxx.class){
...
}
- 当前实例:线程到达该区块时,该实例的所有操作将被锁住,直到该区块执行完毕。实例对象锁
synchronized(this){
...
}
- 扩展阅读:synchronized