jdk1.7.0_71迭代器bug

做java开发这么多年,终于逮住了一个jdk版本的bug。如下代码所示,jdk1.7.0_71这个版本会报下面错误,jdk1.7.0_80就可以正常运行了。具体原因不做具体说明。

private List<Long> filterRxIdsHasProblem(List<Long> oriList, List<Long> lastlist) {
        int size = lastlist.size();
        Iterator<Long> ori = oriList.iterator();
        Iterator<Long> last = lastlist.iterator();
        int i = 0;
        while (ori.hasNext()) {
            logger.info("ori->last->list:{},last:{}", JsonUtil.toJSONString(oriList), JsonUtil.toJSONString(lastlist));
            if (i == size) {
                break;
            }
            Long oriLong = ori.next();
            while (last.hasNext()) {
                Long it = last.next();
                if (oriLong.equals(it)) {
                    logger.info("ori->last->list-1:{},last:{}", JsonUtil.toJSONString(oriList), JsonUtil.toJSONString(lastlist));
                    last.remove();
                    ori.remove();
                    break;
                }
            }
            i++;
            continue;
        }
        return oriList;
    }






java.util.ConcurrentModificationException: null
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
at java.util.ArrayList$Itr.remove(ArrayList.java:845)
at com.jd.medicine.b2c.man.center.facade.DataArchiveExportServiceImpl.filterRxIdsHasProblem(DataArchiveExportServiceImpl.java:796)
at com.jd.medicine.b2c.man.center.facade.DataArchiveExportServiceImpl.delete3TbInfoSkuExtends(DataArchiveExportServiceImpl.java:757)
at com.jd.medicine.b2c.man.center.facade.DataArchiveExportServiceImpl$$FastClassBySpringCGLIB$$2d2918c0.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:700)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
at com.jd.medicine.base.common.logging.rxlog.logaspect.RxLogid4XmlAspect.execPointcut(RxLogid4XmlAspect.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:633)
at com.jd.medicine.b2c.man.center.facade.DataArchiveExportServiceImpl$$EnhancerBySpringCGLIB$$212b2f79.delete3TbInfoSkuExtends(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.jd.jsf.gd.filter.ProviderInvokeFilter.reflectInvoke(ProviderInvokeFilter.java:140)
at com.jd.jsf.gd.filter.ProviderInvokeFilter.invoke(ProviderInvokeFilter.java:100)
at com.jd.jsf.gd.filter.ProviderConcurrentsFilter.invoke(ProviderConcurrentsFilter.java:62)
at com.jd.jsf.gd.filter.ProviderTimeoutFilter.invoke(ProviderTimeoutFilter.java:39)
at com.jd.jsf.gd.filter.ProviderMethodCheckFilter.invoke(ProviderMethodCheckFilter.java:78)
at com.jd.jsf.gd.filter.TokenFilter.invoke(TokenFilter.java:41)
at com.jd.jsf.gd.filter.ProviderInvokeLimitFilter.invoke(ProviderInvokeLimitFilter.java:54)
at com.jd.jsf.gd.filter.ProviderHttpGWFilter.invoke(ProviderHttpGWFilter.java:47)
at com.jd.jsf.gd.filter.ProviderGenericFilter.invoke(ProviderGenericFilter.java:118)
at com.jd.jsf.gd.filter.ProviderContextFilter.invoke(ProviderContextFilter.java:73)
at com.jd.jsf.gd.filter.ExceptionFilter.invoke(ExceptionFilter.java:49)
at com.jd.jsf.gd.filter.SystemTimeCheckFilter.invoke(SystemTimeCheckFilter.java:79)
at com.jd.jsf.gd.filter.FilterChain.invoke(FilterChain.java:275)
at com.jd.jsf.gd.server.ProviderProxyInvoker.invoke(ProviderProxyInvoker.java:67)
at com.jd.jsf.gd.server.telnet.InvokeTelnetHandler.telnet(InvokeTelnetHandler.java:195)
at com.jd.jsf.gd.server.TelnetChannelHandler.channelRead(TelnetChannelHandler.java:152)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:276)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:263)
at io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)
at java.lang.Thread.run(Thread.java:745)

猜你喜欢

转载自blog.csdn.net/u013465194/article/details/83384445
71