Java集合框架中的并发修改问题示例

原创 男娘i 2024-09-16 06:04 147阅读 0赞

在Java集合框架中,如果多个线程同时访问并修改同一个集合,可能会出现并发修改问题。

以下是一个简单的示例:

  1. import java.util.*;
  2. import java.util.concurrent.locks.Lock;
  3. import java.util.concurrent.locks.ReentrantLock;
  4. public class ConcurrentModification {
  5. private List<String> list = new ArrayList<>();
  6. public void add(String str) {
  7. Lock lock = new ReentrantLock();
  8. lock.lock();
  9. try {
  10. list.add(str);
  11. } finally {
  12. lock.unlock();
  13. }
  14. }
  15. public void concurrentAdd() throws InterruptedException {
  16. Thread thread1 = new Thread(() -> add("Thread 1 added item")));
  17. Thread thread2 = new Thread(() -> add("Thread 2 added item")));
  18. thread1.start();
  19. thread2.start();
  20. // 等待两个线程执行完毕
  21. thread1.join();
  22. thread2.join();
  23. System.out.println(list); // 错误结果,未正确添加新项
  24. }
  25. }

在这个示例中,两个线程同时调用add方法来添加新的字符串。由于锁机制的问题,导致原始的列表并未成功添加新项。

为了避免这种情况,可以使用Java并发工具类如Collections.synchronizedList(list)ReentrantReadWriteLock来保证线程安全。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,147人围观)

还没有评论,来说两句吧...

相关阅读