java.util.ConcurrentModificationException 异常
2008-01-27 21:02
555 查看
使用 jbpm时,查找需要singal的task时代码如下,
Iterator it1=collect.iterator();
while(it1.hasNext()){
TaskInstance taskInstance=(TaskInstance)it1.next(); //在该行处报异常。
Set actorSet = taskInstance.getPooledActors();
Iterator iterator = actorSet.iterator();
while(iterator.hasNext()){
PooledActor poolAct = (PooledActor)iterator.next();
if((""+userId).equals(poolAct.getActorId())
&&!taskInstance.hasEnded() ){
Set set = taskInstance.getToken().getNode().getArrivingTransitions();
taskInstance.end();
}
}
}
在网上查找到,
一个Collection进行遍历(iteration)同时,对这个Collection里面的元素(element)进行做修改时,就会抛出java.util.ConcurrentModificationException.
故将代码修改为如下:
//Iterator it1=collect.iterator(); //修改1
Object[] objs = collect.toArray();
for(int j=0;j<objs.length;j++){
// while(it1.hasNext()){ //修改2
TaskInstance taskInstance=(TaskInstance)objs[j];
Set actorSet = taskInstance.getPooledActors();
Iterator iterator = actorSet.iterator();
while(iterator.hasNext()){
PooledActor poolAct = (PooledActor)iterator.next();
if((""+userId).equals(poolAct.getActorId())
&&!taskInstance.hasEnded() ){
Set set = taskInstance.getToken().getNode().getArrivingTransitions();
taskInstance.end();
}
}
}
经测试通过。
Iterator it1=collect.iterator();
while(it1.hasNext()){
TaskInstance taskInstance=(TaskInstance)it1.next(); //在该行处报异常。
Set actorSet = taskInstance.getPooledActors();
Iterator iterator = actorSet.iterator();
while(iterator.hasNext()){
PooledActor poolAct = (PooledActor)iterator.next();
if((""+userId).equals(poolAct.getActorId())
&&!taskInstance.hasEnded() ){
Set set = taskInstance.getToken().getNode().getArrivingTransitions();
taskInstance.end();
}
}
}
在网上查找到,
一个Collection进行遍历(iteration)同时,对这个Collection里面的元素(element)进行做修改时,就会抛出java.util.ConcurrentModificationException.
故将代码修改为如下:
//Iterator it1=collect.iterator(); //修改1
Object[] objs = collect.toArray();
for(int j=0;j<objs.length;j++){
// while(it1.hasNext()){ //修改2
TaskInstance taskInstance=(TaskInstance)objs[j];
Set actorSet = taskInstance.getPooledActors();
Iterator iterator = actorSet.iterator();
while(iterator.hasNext()){
PooledActor poolAct = (PooledActor)iterator.next();
if((""+userId).equals(poolAct.getActorId())
&&!taskInstance.hasEnded() ){
Set set = taskInstance.getToken().getNode().getArrivingTransitions();
taskInstance.end();
}
}
}
经测试通过。
相关文章推荐
- 遍历Map时抛出java.util.ConcurrentModificationException异常的解决办法
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- java.util.ConcurrentModificationException异常
- 遍历集合时出现的异常Exception in thread "main" java.util.ConcurrentModificationException
- 偶遇到 java.util.ConcurrentModificationException 的异常
- 【异常篇-java-java.util.ConcurrentModificationException】
- java.util.ConcurrentModificationException异常解决方法
- 为什么会出现 java.util.ConcurrentModificationException 异常?
- java.util.ConcurrentModificationException 异常说明
- 从ArrayList中删除对象报java.util.ConcurrentModificationException异常解决
- java.util.ConcurrentModificationException异常
- java.util.ConcurrentModificationException异常解决
- java.util.ConcurrentModificationException异常
- java.util.ConcurrentModificationException 集合remove异常
- 异常记录——java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException异常
- java.util.ConcurrentModificationException 异常解决办法及原理(顶)
- java.util.ConcurrentModificationException异常处理
- java.util.ConcurrentModificationException 异常
- java.util.ConcurrentModificationException异常