java synchronized关键字的用法
时间: 2024-08-13 18:07:04 浏览: 47
在Java中,`synchronized`关键字用于控制多个线程对共享资源的访问,确保同一时间只有一个线程可以访问特定代码块或方法,从而避免数据竞争和并发问题。`synchronized`有以下几种用法:
1. **方法同步(synchronized方法)**:
```java
public synchronized void method() {
// 该方法内部的代码会被锁定,其他线程在此期间无法调用此方法
}
```
在方法上使用`synchronized`意味着整个方法体对于调用它的线程来说是独占的。
2. **代码块同步(synchronized代码块)**:
```java
public void method() {
synchronized (this) { // 锁定对象可以是当前对象(this)
// 代码块内的逻辑是同步的
}
}
```
在代码块前使用`synchronized`,可以指定一个特定的对象作为锁,这样只有持有该对象锁的线程才能执行同步代码。
3. **静态同步(synchronized static)**:
```java
synchronized (MyClass.class) {
// 所有试图访问此静态同步代码块的线程都需要共享同一个锁
}
```
对静态代码块使用`synchronized`,锁是类本身而不是特定对象。
相关问题--
1. synchronized关键字如何防止数据竞争?
2. 使用synchronized时,如何选择锁定对象?
3. 在什么情况下,推荐使用代码块同步而不是方法同步?
阅读全文