首页 > 编程知识 正文

arraylist的使用,linkedlist实现了什么接口

时间:2023-05-05 17:15:17 阅读:176136 作者:1605

一.问题的发现

最近,在使用分布式任务powerjob时,发现了数组分页后的序列化问题。 事情是这样的。 在我运行MapReduce模式的时候,我发现我正在生成子任务时间com.esoteric software.kryo.kryo5. kryoexception : classcannotbecreates 33660 Java.util.ArrayList $ sublistserializationtrace : outplaceidlist错误。 意思是不能创建我正在参与的outplaceidlist对象。

二.问题排查

如果仔细看日志,好像是序列化问题导致的。

百度之后也有类似的问题。 https://blog.csdn.net/weixin _ 43060346/article/details/87104010

当我检查代码时,我发现我的参与是直接使用的Lists.partition方法分页后的子列表。 我想是这个原因,首先直接new list,重新启动后发现问题已经解决了

三.分析源代码

因此,问题很明显,这个list寻呼后的对象是不能序列化的。 关于powerjob的MapReduce源代码,这里没有深入探讨,而是集中在以下Lists.partition中是如何生成的:

来到这里,最终发现使用了一种叫做subList的方法。 进入subList,里面的get方法实际上回来了

ArrayList.this.element data (offset index ); elementData对象是根据分页偏移剪切的对象,但当您查看elementData对象的修饰符时,就发现了问题。

transient修饰符表示此elementData对象不能序列化。 因此,如果在Lists.partition方法中直接分页的对象被序列化,则会报告开头提到的错误。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。