同步是多线程中的重要概念。同步的使用可以保证在多线程运行的环境中,程序不会产生设计之外的错误结果。同步的实现方式有两种,同步方法和同步块,这两种方式都要用到synchronized 关键字。
1.同步方法
即有 synchronized 关键字修饰的方法。
由于 java 的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
代码如:
public synchronized void save(){
}
注: synchronized 关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。
即有 synchronized 关键字修饰的语句块。
被该关键字修饰的语句块会自动被加上内置锁,从而实现同步代码如:
synchronized(object){
}
注:同步是一种高开销的操作,因此应该尽量减少同步的内容。
通常没有必要使用同步整个方法,使用 synchronized 代码块同步关键代码即可。