我试图将linkedList转换为ArrayList,如下所示.
private LinkedListmyLinkedList= new LinkedList (); public Collection getData() { return new ArrayList (myLinkedList); }
LinkedList可能由多个线程更新.在生产中测试时,我得到以下错误.错误不一致.所以我得到它可能是一个星期,一个月左右.
java.lang.ArrayIndexOutOfBoundsException: 15 at java.util.LinkedList.toArray(LinkedList.java:866) at java.util.ArrayList.(ArrayList.java:131) at org.xxx.yyy.zzz.getData(Data.java:291)
有没有什么办法可以与LinkedList的并发修改有关.感谢任何帮助.
toArray
失败只是你做一些根本危险的事情的一个症状.
来自以下文件LinkedList
:
如果多个线程同时访问链表,并且至少有一个线程在结构上修改了列表,则必须在外部进行同步.
您需要添加同步(不仅仅是为了toArray
,但基本上是列表的所有用途),或者使用一个设计为线程安全的并发集合.