Java序列化导致并发修改异常

标签 java serialization concurrency

我的程序每秒更新大约一百次存储在 ArrayList 中的数百个对象。我已经实现了 Java 的内置序列化,它运行良好,除非在对象运行时尝试序列化,在这种情况下,我可能必须序列化六次才能工作(每次失败的尝试都会抛出一个异常(exception))。我尝试将 arraylist 标记为 transient ,但是当我加载序列化文件时,抛出了一个空指针异常。所以我尝试在无参数构造函数中初始化 transient 数组列表,但没有任何帮助。我该怎么办?谢谢。

最佳答案

首先确保您已同步访问您的ArrayList,例如当你初始化它时:

List<String> list = Collections.synchronizedList(new ArrayList<String>());

当你需要序列化它时,抓取一份由于同步而保持一致的副本:

List<String> copy = new ArrayList<String>(list);

现在您可以安全地序列化此副本,而不会阻止对主列表的访问。

关于Java序列化导致并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5608223/

相关文章:

MySql get_lock 用于并发安全更新插入

mysql - 使用可重复读取隔离时 SELECT .. FOR UPDATE 有什么用?

java - 从 4.2.0.RC3 升级到 4.2.0.RELEASE 时出现 Spring Async 问题

java - 通过传递引用与返回引用来反序列化对象

asp.net - 在 Web API/APIController 中控制序列化

python - __reduce__ 函数在 pickle 模块的情况下如何工作?

Java - 并发/阻塞队列单元测试策略

java - 如何在 Java 排序过程中删除前导 "the"s?

java - Wildfly忽略WEB-INF/lib中的库

java - linux 中的 tomcat :java. lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory