2.1 定义和作用
synchronized
关键字可以用来修饰方法或者代码块。在方法或代码块被执行时,它能够保证同一时刻只有一个线程执行该段代码。这一特性使得synchronized
成为实现临界区(Critical Section)和避免竞态条件(Race Condition)的简便方法。
2.2 使用方法
- 同步实例方法:锁定当前实例对象
public synchronized void method() {
// 同步代码
}
- 同步静态方法:锁定当前类的Class对象。
public static synchronized void staticMethod() {
// 同步代码
}
- 同步代码块:指定一个特定对象作为锁。
public void method() {
synchronized(this) {
// 同步代码
}
}
2.3 对比其他关键字
与volatile
和final
相比,synchronized
不仅能保证可见性和顺序性,还能保证原子性。volatile
仅保证变量的修改可见性和禁止指令重排序,而final
关键字则用于声明常量。