java synchronized 修饰方法
时间: 2024-09-28 19:02:41 浏览: 43
在 Java 中,`synchronized` 关键字可以用来修饰方法,这表示该方法在同一时刻只能由一个线程访问,从而实现了线程之间的互斥。当你在一个类的方法前加上 `synchronized`,这个特定的实例方法就会成为共享资源的“守护者”,确保任何时候只有一个线程可以执行它。
当你在一个方法上使用 `synchronized` 时,你需要注意以下几点:
1. **锁定对象**:`synchronized` 操作总是针对一个对象,通常是方法所在的类的对象(即 this 关键字)。这意味着如果多个线程共享同一个类的实例,它们各自调用 `synchronized` 方法时,只会有一个实例同时被锁定。
2. **内存可见性**:`synchronized` 还能保证在同步代码块中的修改对其他线程是可见的,有助于维护数据一致性。
3. **线程阻塞**:如果当前实例已经被另一个线程持有锁,则调用 `synchronized` 方法的线程会被阻塞,直到获得锁为止。
4. **原子性**:`synchronized` 可以提供一定程度的原子性,尤其是对于读写操作,但是并不能完全保证,因为还是可能存在竞态条件,如读-改-写。
5. **嵌套锁**:如果你在一个已锁定的方法内再次调用其他 `synchronized` 方法,那么后者会自动获取第一个锁相同的对象的锁。
```java
public class MyClass {
private int count;
public synchronized void increment() {
count++;
}
}
```
在这个例子中,`increment` 方法是同步的,确保在同一时刻只有一个线程可以增加计数。
阅读全文