早上好,希望得到一些可能比我自己更了解Java的人的帮助。我来自.NET背景,并且负责跟踪供应商提供的解决方案中的问题。我相信我已经找到了它,但如果可能的话,我想要第二,第三或第四个意见。迭代器和嵌套哈希表的Java并发问题
我认为正在发生的是行号108(在下面的代码块中指出)正在修改声明为while循环外部的Iterator(memIter)。他们通过更改在循环中声明的实例来修改它,而不是原始对象,我相信它会抛出,因为在修改后的集合/ hastbale的第二次迭代上调用了“next”。我发现这个网站上的一些线程指向这个(http://stackoverflow.com/questions/602636/concurrentmodificationexception-and-a-hashmap),但因为它修改了一个集合(对不起,如果这些是.NET的条款)在一个集合中(从迭代器中的一个项目的属性hastable中移除一个成员),我会假设同样的逻辑会适用,但它不是我的空间。另外如果我的假设是正确的可以somone请提供正确的实施?
STACK
java.util.ConcurrentModificationException 堆栈跟踪: java.util.ConcurrentModificationException 在java.util.HashMap中$ HashIterator.nextEntry(HashMap.java:793) 在$的java.util.HashMap ValueIterator.next(HashMap.java:822) at xxx.xxxxx.xx.xxxxxxx.end(RoleOrganizer.java:108) at(xxxxxxxxx.java:568) at xxx.xxxx.xxxxxxx.handleRequest(xxxxHandler.java :74) at com.xxxxx.server.JavaInstanceMethod.execute(JavaInstanceMethod.java:33) at xx.xxxxx xx.execute(AppServer.java:1469) at xxx.xx.executeRequest(xxxxxjava:1269) at xxx.xxxxx.server.xxxx.doGet(xxxxx.java:350) at javax.servlet.http.HttpServlet。服务(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org。 apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke( StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(Standar org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org。 apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke( HandlerRequest.java:283) 在org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767) 在org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697) 的组织。 apache.jk.common.ChannelSocket $ SocketConnection.runIt(ChannelSocket.java:889) at org.apache.tomcat.util.thread s.ThreadPool $ ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread。的java:619)
用所示堆栈错误行数108
线87 anpublic空隙端()
{
Iterator iter = new ArrayList(this.m_member.getRoles()).iterator();
while (iter.hasNext())
{
UserType rt = (UserType)iter.next();
if (!this.m_roleMap.containsKey(rt.getGID()))
{
this.m_member.removeRole(ut);
}
}
iter = this.m_roleMap.values().iterator();
线99
而下面的代码(iter.hasNext ())
{
UserType ut = (UserType)iter.next();
if (ut.isUnique())
{
Iterator memIter = this.m_member.doTask().lookUpMembers().iterator();
while (memIter.hasNext())
{
第108行
StoreMember mem =(StoreMember)memIter.next();
if (mem.doWork() != this.m_member.getId())
{
if ((mem.hasRole(ut)) && (!mem.isFormer()))
{
mem.removeRole(ut);
}
}
}
}
非常感谢您的回复。主要任务是验证它是问题的根源,我认为你已经帮助我得出结论...再次感谢 – 2011-01-30 08:27:45