English 中文(简体)
异构体
原标题:Iterator Concurrent Modifiction Exception

如果清单在校正中修改,则该法典将放弃同时变更的例外情况。 是否有可能通过在一些同步的集团中公布该守则来避免该守则?

List l = Collections.synchronizedList(new ArrayList());

// normal iteration -- can throw ConcurrentModificationException
// may require external synchronization
for (Iterator i=list.iterator(); i.hasNext(); ) {
  doSomething(i.next());
}
最佳回答
  • 如果你想从列表中删除一个元素,你可以通过调用iterator.remove()来实现,而不必使用list.remove(iterator.next())

  • 如果你正在添加一个项目 - 那么请创建一个重复的列表副本并在其中添加。

  • 如果上述法典是同一方法的一部分,那么你不需要同步清单或同步区块,那么没有其他线索可以查阅当地名单。

问题回答

页: 1 如果你通过http://java.sun.com/javase/6/docs/api/java/util/Iterator.html> rel=“nofollow noretinger”>Iterator接口,则可在网上查阅。 您可使用Iterator.remove()去除内容。

当您迭代访问时,您无法修改它。同步无法解决此问题。

EDIT :I forgot iterator确实有remove 方法。 因此可以删除。

我同意其他人关于迭代器remove()的看法。


关于同步,我想要补充的是同步是设计用来控制不同线程之间的交互。

一个对象通常有多个方法被同步,且其中一个方法需要调用另一个方法。因此,语言设计者决定,同一个线程不会因为在同步方法上阻塞自己。

而且,关于它的想法是,一个read子被阻挡在等待自己的时候,你有了一个 magn光灯starvation Perspective!

因此,这回答了你的一个问题:通过同步你的代码无法避免这个问题。

使用CopyOnWriteArrayList代替同步的ArrayList

List l = Collections.synchronizedList(new ArrayList());

synchronized(l) { 
   // normal iteration -- can throw ConcurrentModificationException
   // may require external synchronization
   for (Iterator i=list.iterator(); i.hasNext(); ) {
      doSomething(i.next());
   }
}




相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签