gpt4 book ai didi

java - java中迭代器和iteratorList的同步

转载 作者:行者123 更新时间:2023-12-02 00:30:13 25 4
gpt4 key购买 nike

我有一个数组列表,我想在同一时间(几乎)添加和删除许多项目。所以我决定创建两种方法。在第一种方法中,我实现了包含删除部分的方法,我使用类似以下内容:

   //my list
ArrayList<Human> list= new ArrayList<Human>(100);

//Human is the object of the class Human
List<Human> syncList = Collections.synchronizedList(new ArrayList<Human>());
synchronized (syncList){

for (Iterator<Human> iter = list.iterator(); iter.hasNext();) {
Human = iter.next();
-
-
//using the removes method of the iterator
it.removes(something);

在第二种方法(我需要添加许多项目)中,如下所示:

            for(  ListIterator<Human> it = list.listIterator();it.hasNext();){  
List<Human> syncList = Collections.synchronizedList(newArrayList<Human>());
synchronized (syncList){
-
-
//using the add method of the iterator list
it.add(something)

现在我意识到,当这两个 void 方法完成并且另一个函数调用的列表没有适当的行为时。我的意思是某些元素没有从列表中添加或删除。我该如何解决这个问题?有什么想法吗?

最佳答案

您正在同步两个完全不同的对象,因此行为不一致。您对 synchronizedList() 的调用将返回您正在同步的原始列表的包装器。由于这两种方法使用不同的包装器,因此没有发生实际的同步。您只需要同步原始列表实现即可。当然,列表成员的任何其他使用也应该同步

关于java - java中迭代器和iteratorList的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9216678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com