将CopyOnWriteArrayList序列化时可能抛出ConcurrentModificationException,如何解决?

问题描述

我用CopyOnWriteArrayList来保存着一个列表,该列表可能被其他线程改变。而在序列化到流的writeObject方法中,其有概率抛出ConcurrentModificationException,这是为什么呢?应该怎么解决?

解决方案

解决方案二:
该回复于2011-02-14 13:10:05被版主删除
解决方案三:
并发修改异常你在写入的同时,数据有可能被其他程序改动了。希望对你有帮助
解决方案四:
异常底层是由ArrayList里面抛出的,但是按理说CopyOnWriteArrayList说了是线程安全,那么我在直接writeObject的时候应该获得一个不变的ArrayList才对吧。可是竟然会出问题……数据肯定会被修改,只是怎么才能保证在writeObject的时候不出问题。因为程序有不少地方是把对象序列化的,同时不少地方是在修改该对象的,所以想找一个在修改的同时序列化能不出问题的容器……
解决方案五:
多个线程不能同时修改一个集合
解决方案六:
arraylist是线程不安全的,如果用了CopyOnWriteArrayList,其底层是arraylist的话,应该也没有好的办法,除非换成线程安全的数据结构,或者你自己重写。。
解决方案七:
CopyOnWriteArrayList假设在迭代器的迭代中是不会修改这个list的,如果你在迭代过程中通过迭代器去修改它(Iteratoriter...iter.set(xxx))就会出现这个异常。它工作时,修改的操作仅发生在List中定义的方法,如果你想在它的迭代器中也修改它,那还是需要同步的。
解决方案八:
The"snapshot"styleiteratormethodusesareferencetothestateofthearrayatthepointthattheiteratorwascreated.Thisarrayneverchangesduringthelifetimeoftheiterator,sointerferenceisimpossibleandtheiteratorisguaranteednottothrowConcurrentModificationException.Theiteratorwillnotreflectadditions,removals,orchangestothelistsincetheiteratorwascreated.Element-changingoperationsoniteratorsthemselves(remove,set,andadd)arenotsupported.ThesemethodsthrowUnsupportedOperationException.看后面的解释,对iterator的修改貌似也是不支持或不会反映到iterator上的,这个层面来讲应该是安全的,不知道lz能不能还原一小段模拟程序,类似如下:publicstaticvoidmain(String[]args){CopyOnWriteArrayList<Integer>cowal=newCopyOnWriteArrayList<Integer>();cowal.add(1);cowal.add(2);cowal.add(3);List<Integer>sub=cowal.subList(1,2);cowal.add(4);sub.get(0);//throwsConcurrentModificationException}

解决方案九:
楼主,堆栈信息贴一下,还有代码我看了半天CopyOnWriteArrayList也没看出来它怎么可能抛出这个异常

时间: 2024-11-03 08:34:51

将CopyOnWriteArrayList序列化时可能抛出ConcurrentModificationException,如何解决?的相关文章

HashMap迭代时不抛出ConcurrentModificationException的特例

         众所周知,HashMap在迭代时remove会抛出异常,ConcurrentModificationException,但事实真的是这样的吗?的确会抛异常,但也有特例.废话少说,上代码: public class ConcurrentModificationException { public static void main(String[] args) { HashMap<Integer, Integer> map = new HashMap<>(); map

java-当在bitmap 中存储时DecodeStream抛出空值

问题描述 当在bitmap 中存储时DecodeStream抛出空值 使用下面的代码,我在imageBitmap = BitmapFactory.decodeStream(is2,null, options);处获取异常 NULL. 先前运行时,可以解码,但是现在为什么不行了呢?decodeStream 抛出 null吗? public void showImageThumb(FileInputStream is) { final int IMAGE_MAX_SIZE = 100; FileIn

调试-在测试一个tesseract程序时logcat抛出一个错误无法解决,请教各位大侠

问题描述 在测试一个tesseract程序时logcat抛出一个错误无法解决,请教各位大侠 这是logcat的信息 02-09 12:45:12.405: D/MainActivity ...(2210): begin>>>>>>> 02-09 12:45:12.409: D/nimei(2210): ---in ocr() before try-- 02-09 12:45:12.409: V/MainActivity ...(2210): not in the

Android 中读取SD卡文件时抛出NullPointerException错误解决办法

Android 中读取SD卡文件时抛出NullPointerException错误解决办法 相关源码: package com.example.musicplayer; import java.io.File; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import

c#4 0-C# 请教XML序列化时,内存错误问题如何解决

问题描述 C# 请教XML序列化时,内存错误问题如何解决 环境C#4.5 E5 16G内存 代码: try { CommonHelper.CGCollect(); string xml = XmlHelper.XmlSerialize(listKeyWords, Encoding.Default); Mutex m = new Mutex(); if (!string.IsNullOrEmpty(xml)) { DocHelper.writeXC(xml, string.Format("{0}{

Hibernate3连接oracle11g在启动项目时总是抛出如下异常

问题描述 我的hibernate.cfg.xml的配置文件如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-confi

jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法_jquery

序列化中文时之所以乱码是因为.serialize()调用了encodeURLComponent方法将数据编码了 解决方法就是进行解码 原因:.serialize()自动调用了encodeURIComponent方法将数据编码了 解决方法:调用decodeURIComponent(XXX,true);将数据解码 例如: var params = jQuery("#formId").serialize(); // http request parameters. params = deco

菜鸟问题:访问ibm websphere 6.0服务器上的页面时,抛出版本JAR版本不能识别的提示

问题描述 请各位大侠帮忙看一下--使用ibmwebsphere6.0作为服务器,把项目打包发布到服务器上后,访问一个excel表单上传页面出错,提示信息为JSPG0091E:文件/modules/financialAffairs/importExcel/importOldResultTalbe.jsp中的行68发生错误JSPG0093E:从文件/modules/financialAffairs/importExcel/importOldResultTalbe.jsp生成servlet错误E:Pr

C# 请教XML序列化时,内存错误问题如何解决

问题描述 环境C#4.5E516G内存预计序列化后数据大小1G左右这个问题如何解决呢?代码:[List<KeyWords>listKeyWords]try{CommonHelper.CGCollect();stringxml=XmlHelper.XmlSerialize(listKeyWords,Encoding.Default);Mutexm=newMutex();if(!string.IsNullOrEmpty(xml)){DocHelper.writeXC(xml,string.Form