问题标签 [copyonwritearraylist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - CopyOnWriteArrayList 可以帮助允许从已放入迭代器中的不同线程中删除项目
有一个地图按类型保存相同事件的事件监听器列表作为键,
func_1()
将开始从映射中获取一种类型的侦听器列表并迭代列表以处理每个侦听器的事件。
当一个侦听器完成其处理时,它会要求将其从地图中的侦听器列表中删除。
因为侦听器位于迭代器中,将其从原始列表中删除将导致java.util.ConcurrentModificationException
获取iterator.previous()
下一个侦听器。
问题是如果使用 CopyOnWriteArrayList 复制侦听器列表然后对其进行迭代器,因为它是列表的副本,当侦听器从其他线程中删除时它仍然会抛出吗?
只是简单地制作普通列表的副本而不是CopyOnWriteArrayList
迭代器有什么区别吗?
android - CopyOnWriteArraylist 同步方法
它的方法来自 CopyOnWriteArrayList.class
好的,可以说我有
我有方法
我认为比 copyOnWriteArrayList 同步方法“设置”上(this)
在我的方法中,我锁定了我的列表(同步(tasksList))为什么方法工作正确。我认为行( tasksList.set(index, task); )将不起作用,因为 tasksList 已经阻止了上面的行
arraylist - 当线程在活动时不处于(可运行)状态时
我希望你们一切都好。所以来到这个问题。我有这部分代码:
基本上,我在完整代码(如下)中创建的多个线程同时访问此列表,这些线程负责进行一些计算并返回结果,然后primelist
通过调用方法将其添加到此列表中addToList(String list_elm)
。
但是,在所有线程都被终止(即:完成它们的工作)之后,在primelist
. 因此,经过一番研究,事实证明 ArrayList 不是线程安全的类,因此它的方法也不是。我想问以下(也许很深)问题:
线程在执行一行代码时是否会被放入(等待//定时等待)..,也就是说它正在调用该方法addToList(String list_elm)
并且它到达了该行primelist.add(list_elm);
但是在添加元素时它恰好停止了!
如果不能,请澄清我对(尤其是)ArrayList 案例的困惑。((基本上是怎么回事?^^))
完整代码:
java - CopyOnWriteArrayList 也会出现 ConcurrentModificationException
我正在使用以下代码创建一个 CopyOnWriteArrayList,修改其中的元素,然后打印这些元素。我无法理解为什么在使用 CopyOnWriteArrayList 时会出现 ConcurrentModificationException。
java - 为什么 CopyOnWriteArrayList 使用 getArray() 来访问数组引用?
CopyOnWriteArrayList 中几乎所有的方法都使用 getArray() 来直接调用数组。这种行为有原因吗?例如 :
或者
java - 迭代器、列表迭代器和 CopyOnWriteArrayList 的区别
考虑一个 ArrayList,其中用于 Iterator 和 List 迭代器操作,当迭代列表并且每当 Collection 对象发生更改时,它就会抛出 ConcurrentModificationException,如下所示:
更新迭代器对象时不是这种情况,即如下所示:
而当涉及到 copyOnWriteArrayList 时,如果迭代器对象被更新为像下面这样的普通迭代器的删除操作(或)listIterator 被更新(添加/删除),它会抛出 UnsupportedOperationException:
对于上述结果,我有几个问题:
1)对于一个ArrayList,如果一个迭代器能够在迭代过程中使用迭代器对象修改列表,为什么要使用copyOnWriteArrayList?
1)为什么copyOnWriteArrayList迭代器更新遇到Iterator对象变化时抛出unsupportedOperationExceptions,而collection对象发生变化时没有异常?
3)看起来上面2个场景是相反的。请告诉我这些什么时候使用以及在哪些场景中使用?
这完全令人困惑......
java - 迭代 CopyOnWriteArrayList 时出现 UnsupportedOperationException
我在一本书中看到以下声明:
任何基于写时复制
Iterator
或ListIterator
(例如添加、设置或删除)调用的变异方法都会抛出UnsupportedOperationException
.
但是当我运行以下代码时,它工作得很好并且不会抛出UnsupportedOperationException
.
上面的代码给出了以下结果:
list
为什么在使用该方法修改给定值时没有出现异常remove
?
multithreading - CopyOnWriteArrayList 中的两个线程更新
两个线程假设 t1 和 t2 都试图同时在 copyOnWriteArrayList 中执行更新操作......那么哪些线程更改将首先复制到原始列表中?