在两个线程间共享数据,需要考虑到线程安全和数据同步的问题。以下是几种常见的方法:
1. 使用synchronized关键字:可以使用synchronized关键字来保证多个线程对共享变量的访问是互斥的,从而避免竞态条件等问题。
```java
public class SharedData {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
```
2. 使用Lock接口:与synchronized关键字类似,Lock接口也可以用来实现多个线程对共享变量的互斥访问。
```java
public class SharedData {
private int count = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
}
```
3. 使用volatile关键字:可以使用volatile关键字来保证多个线程对共享变量的可见性,从而避免出现脏读等问题。
```java
public class SharedData {
private volatile int count = 0;
public void increment() {
count++;
}
public int getCount() {
return count;
}
}
```
需要注意的是,使用volatile关键字只能保证可见性,不能保证原子性,如果需要保证原子性,还需要使用synchronized关键字或者Lock接口。
4. 使用线程安全的数据结构:Java提供了一些线程安全的数据结构,如ConcurrentHashMap、CopyOnWriteArrayList等,可以直接在多个线程间共享使用。
```java
public class SharedData {
private ConcurrentHashMap map = new ConcurrentHashMap<>();
public void put(String key, int value) {
map.put(key, value);
}
public int get(String key) {
return map