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

原创 妖狐艹你老母 2024-10-20 23:45 110阅读 0赞

在Java的集合框架中,尤其是在多线程环境下,并发修改问题是非常常见的。以下是一个具体的实例:

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;
  5. public class ConcurrentModifyExample {
  6. private List<String> list = new ArrayList<>();
  7. // 并发添加元素
  8. public void addConcurrently(int count) {
  9. ExecutorService executor = Executors.newFixedThreadPool(count);
  10. for (int i = 0; i < count; i++) {
  11. executor.submit(() -> list.add("Item " + i)));
  12. }
  13. executor.shutdown();
  14. }
  15. // 传统的单线程添加元素
  16. public void addSequentially(int count) {
  17. for (int i = 0; i < count; i++) {
  18. list.add("Item " + i);
  19. }
  20. }
  21. public static void main(String[] args) {
  22. ConcurrentModifyExample example = new ConcurrentModifyExample();
  23. example.list.add("Item 0");
  24. // 并发添加5个新项
  25. example.addConcurrently(5);
  26. // 输出修改后的列表
  27. System.out.println("After concurrent modification:");
  28. for (String item : example.list) {
  29. System.out.println(item);
  30. }
  31. // 传统的顺序添加10个新项
  32. example.addSequentially(10);
  33. // 再次输出修改后的列表
  34. System.out.println("\nAfter sequential modification:");
  35. for (String item : example.list) {
  36. System.out.println(item);
  37. }
  38. }
  39. }

在这个例子中,我们首先创建了一个列表。然后,我们使用addConcurrently方法并发地添加了5个新项。接着,我们对修改后的列表进行输出。

最后,我们使用传统的顺序添加方法addSequentially添加了10个新项,并再次输出修改后的列表。

这个例子展示了在多线程环境下,Java集合框架中并发修改问题的存在以及如何通过合理的设计和控制来避免这些问题。

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

发表评论

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

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

相关阅读