首页 > Java > java教程 > 正文

迭代和修改Java列表时如何避免并发修改异常?

Susan Sarandon
发布: 2024-11-21 09:43:10
原创
375 人浏览过

How Can I Avoid Concurrent Modification Exceptions When Iterating and Modifying Java Lists?

Java 中的并发修改异常

当多个线程尝试修改共享数据结构(例如列出,同时。这可能会导致意外结果和数据损坏。

考虑以下 Java 代码:

import java.util.*;

public class SomeClass {
    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        ListIterator<String> it = s.listIterator();

        for (String a : args)
            s.add(a);

        if (it.hasNext())
            String item = it.next();

        System.out.println(s);
    }
}
登录后复制

此代码尝试迭代列表,同时修改它。运行时抛出“并发修改异常”。这是因为列表迭代器是在对列表进行任何更改之前创建的。

为了避免此异常,您应该确保一次只有一个线程可以修改列表。您可以通过仅在对列表进行所有修改后创建迭代器来完成此操作。正确的代码是:

import java.util.*;

public class SomeClass {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();

        for(String a : args)
            s.add(a);

        ListIterator<String> it = s.listIterator();    
        if(it.hasNext()) {  
            String item = it.next();   
        }  

        System.out.println(s);

    }
}
登录后复制

通过在列表修改后创建迭代器,可以确保在迭代期间只有一个线程可以访问列表。这可以防止“并发修改异常”的发生。

以上是迭代和修改Java列表时如何避免并发修改异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板