Java中集合操作的并发问题实例

原创 古城微笑少年丶 2024-10-10 08:45 116阅读 0赞

在Java中,集合(如ArrayList、Vector等)的并发操作可能会引发各种问题。以下是一个简单的实例:

  1. // 创建一个包含三个元素的ArrayList
  2. List<String> list = new ArrayList<>();
  3. list.add("Element 1");
  4. list.add("Element 2");
  5. list.add("Element 3");
  6. // 使用synchronized关键字同步访问列表
  7. synchronized (list) {
  8. // 同步代码,这里假设我们正在更新列表
  9. for (int i = 0; i < 2; i++) {
  10. list.remove(list.size() - 1); // 删除元素,但操作是异步的
  11. System.out.println("Element " + (i + 1) + " removed from list");
  12. }
  13. }
  14. // 在这个线程中运行其他代码,可能会与同步块中的代码并发执行
  15. new Thread(() -> {
  16. for (int i = 0; i < 2; i++) {
  17. list.add("Inserted Element " + (i + 1))); // 插入元素,但操作是异步的
  18. System.out.println("Inserted Element " + (i + 1)) + " into list");
  19. }
  20. }
  21. ).start();
  22. // 结果:可能会出现"Element 4 removed from list"先于"Inserted Element 1 into list"的情况,这取决于线程调度和同步块执行的顺序。

这个例子展示了在多线程环境下,不正确地同步集合操作可能导致数据不一致的问题。

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

发表评论

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

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

相关阅读