java 全局变量 加锁
时间: 2024-08-13 21:02:45 浏览: 59
在 Java 中,全局变量是指在整个程序范围内都有效的变量,它们的作用域通常是从类级别开始到整个应用结束。然而,由于全局变量在内存中只有一份副本,可能会引起并发问题,特别是在多线程环境中,如果多个线程同时访问和修改全局变量,就可能导致数据不一致。
为了保证全局变量的线程安全,可以采用加锁的方式来进行同步控制。加锁通常是通过 `synchronized` 关键字或者更高级的 `java.util.concurrent.locks` 包提供的锁机制(如 `ReentrantLock` 或 `AtomicVariable`)。当一个线程获取了锁之后,其他线程就必须等待,直到锁释放才能继续执行该变量相关的操作。这样可以避免竞态条件,确保对全局变量的更新是原子性的。
例如:
```java
public class GlobalVarManager {
private static final Object lock = new Object();
private static int globalVar;
public synchronized void incrementGlobal() {
globalVar++;
}
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
incrementGlobal();
}
});
Thread thread2 = new Thread(() -> {
// 同样这里也需要加锁
for (int i = 0; i < 1000; i++) {
synchronized (lock) {
incrementGlobal();
}
}
});
thread1.start();
thread2.start();
}
}
```
在这个例子中,`incrementGlobal()` 方法前使用了 `synchronized`,确保了对全局变量的操作是线程安全的。
阅读全文