JAVA线程共享变量代码
时间: 2024-09-29 14:00:31 浏览: 38
在Java中,当两个或更多的线程需要共享数据时,通常会通过成员变量(实例变量)或静态变量来实现。但是,直接的共享可能会导致并发问题,比如竞态条件(race condition)和死锁。
**1. 共享实例变量**:
```java
public class SharedCounter {
private int count = 0;
public void increment() {
count++;
}
//...
}
```
在这个例子中,`count`是一个实例变量,多个线程可以通过创建`SharedCounter`对象并访问其`increment()`方法来改变它的值。
**2. 同步控制(synchronized)**:
为了防止并发修改,可以使用`synchronized`关键字保证在同一时间只有一个线程可以访问特定代码块:
```java
public class SynchronizedCounter {
private int count = 0;
synchronized void increment() {
count++;
}
}
```
这里,`increment()`方法被声明为同步的,意味着在任何时候只有一个线程能执行这个方法。
**3. volatile关键字**:
如果不需要完全同步,但希望确保可见性和避免指令重排序,可以使用`volatile`关键字:
```java
public class VolatileCounter {
private volatile int count = 0;
public void increment() {
count++;
}
}
```
然而,共享变量时,务必注意线程安全问题,并可能需要配合其他并发工具如`AtomicInteger`、`ReentrantLock`等来更好地管理。
阅读全文