Java集合框架中的并发修改问题示例
在Java集合框架中,如果多个线程同时访问并修改同一个集合,可能会出现并发修改问题。
以下是一个简单的示例:
import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ConcurrentModification {
private List<String> list = new ArrayList<>();
public void add(String str) {
Lock lock = new ReentrantLock();
lock.lock();
try {
list.add(str);
} finally {
lock.unlock();
}
}
public void concurrentAdd() throws InterruptedException {
Thread thread1 = new Thread(() -> add("Thread 1 added item")));
Thread thread2 = new Thread(() -> add("Thread 2 added item")));
thread1.start();
thread2.start();
// 等待两个线程执行完毕
thread1.join();
thread2.join();
System.out.println(list); // 错误结果,未正确添加新项
}
}
在这个示例中,两个线程同时调用add
方法来添加新的字符串。由于锁机制的问题,导致原始的列表并未成功添加新项。
为了避免这种情况,可以使用Java并发工具类如Collections.synchronizedList(list)
或ReentrantReadWriteLock
来保证线程安全。
还没有评论,来说两句吧...