什么情况下需要用到synchronized,举例说明
时间: 2023-08-04 18:28:11 浏览: 39
需要使用 `synchronized` 的情况是当多个线程同时访问共享资源时,可能会出现数据不一致的问题。以下是一些需要使用 `synchronized` 的常见情况:
1. 多个线程访问同一个共享变量时,需要使用 `synchronized` 来保证同步访问。例如,上一个问题中的计数器案例。
2. 多个线程访问同一个对象的方法时,需要使用 `synchronized` 来保证同步访问。例如:
```java
public class BankAccount {
private int balance;
public synchronized void deposit(int amount) {
balance += amount;
}
public synchronized void withdraw(int amount) {
balance -= amount;
}
public synchronized int getBalance() {
return balance;
}
}
```
在这个例子中,`BankAccount` 类表示一个银行账户,支持存款、取款和查询余额。由于这些操作都是对共享变量 `balance` 进行操作,因此需要使用 `synchronized` 关键字来保证线程安全。
3. 多个线程访问同一个对象的静态方法时,需要使用 `synchronized` 来保证同步访问。例如:
```java
public class Singleton {
private static Singleton instance;
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
在这个例子中,`Singleton` 类表示一个单例对象,通过静态方法 `getInstance()` 来获取该对象。由于多个线程可能同时调用这个方法,因此需要使用 `synchronized` 关键字来保证线程安全。