首页 > 编程知识 正文

java创建arraylist,copyofrange方法

时间:2023-05-05 02:19:48 阅读:165133 作者:286

原文网站: CopyOnWriteArrayList--原理_IT利刃出鞘博客-CSDN博客

本文介绍Java的CopyOnWriteArrayList原理。

CopyOnWriteArrayList是JUC的并发容器,是线程安全的ArrayList。

读取操作不锁定,写入操作通过制作底层数组的新副本实现,是一种读写分离的并发策略。 也可以将该容器称为“写入时复制器”。 在JUC中,在同样的容器上安装了CopyOnWriteSet (基础是基于CopyOnWriteArrayList实现的。

Write时总是Copy (将原始阵列复制到新阵列,修改后将引用指向新阵列)。 所有可变操作(add、set、remove等)都通过ReentrantLock控制并发。

优缺点优点

读取操作的高性能适用于读取操作不需要同步措施,因此读取多写入少的并发场景。 如果另一个线程在未抛出concurrentmodificationexception异常的list遍历过程中中途修改了list容器,则会抛出concurrentmodificationexception异常。 另外一方面,CopyOnWriteArrayList根据"读写分离"思想,使遍历和修正操作作用于各不相同的list容器,因此即使在使用迭代器进行遍历的情况下

内存使用量大,每次写入操作都复制原始容器。 在数据量大的情况下,对存储器的压力大,有可能引起频繁的GC; 不能保证实时性的向量可以对读写操作进行锁定同步,读写一致性高的CopyOnWriteArrayList写入和读取分别作用于新旧不同的容器,在写入操作的执行中,读取会受到阻塞大量写入操作性能极差的功能限制迭代器包括remove功能copyonwritearrayliststringlist=newcopyonwritearrayliststring (; list.add(AAA ); list.add('BBB ); list.add(CCC ); iteratorstringiterator=list.iterator (; wile(iterator.hasnext () ) ({String next=iterator.next ); iterator.remove (; } 缺点

exceptioninthread ' main ' Java.lang.unsupportedoperationexceptionatjava.util.concurrent.copyonwritearraylist $ cow ist oncurrentset.Java:47 ) collections.sort(xx,yy )报告异常。 Java.lang.unng

解决方案

list temp=arrays.as list (copyonwritearraylist.to array () ); collections.sort(temp; copyOnwriteArrayList.clear (; copyonwritearraylist.addall (temp; URLcopyonwritearraylist鸡肋类_赶紧的yhddx-CSDN博客

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