Java的CopyOnWrite怎么实现


这篇文章主要介绍了Java的CopyOnWrite怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java的CopyOnWrite怎么实现文章都会有所收获,下面我们一起来看看吧。CopyOnWrite 是什么呢,从字面上看,就是在写入时复制。看起来貌似很简单,那么写入时复制,具体是怎么实现的呢?先来说说思想,具体怎么实现等下分析CopyOnWrite 的思想就是:当向一个容器中添加元素的时候,不是直接在当前这个容器里面添加的,而是复制出来一个新的容器,在新的容器里面添加元素,添加完毕之后再将原容器的引用指向新的容器,这样就实现了写入时复制你还记得在提到数据库的时候,一般都会说主从复制,读写分离吗?CopyOnWrite设计思想是不是和经常说的主从复制,读写分离如出一撤?了解概念之后,对它的优缺点应该就比较好理解了优点就是,读和写可以并行执行,因为读的是原来的容器,写的是新的容器,它们之间互不影响,所以读和写是可以并行执行的,在某些高并发场景下,可以提高程序的响应时间但是呢,你也看到了, CopyOnWrite 是在写入的时候,复制了一个新的容器出来,所以要考虑它的内存开销问题,又回到了在学算法时一直强调的一个思想:拿空间换时间需要注意一下,它只保证数据的最终一致性。因为在读的时候,读取的内容是原容器里面的内容,新添加的内容是读取不到的基于它的优缺点应该就可以得出一个结论:CopyOnWrite 适用于写操作非常少的场景,而且还能够容忍读写的暂时不一致 如果你的应用场景不适合,那还是考虑使用别的方法来实现吧还有一点需要注意的是:在写入时,它会复制一个新的容器,所以如果有写入需求的话免费云主机域名,最好可以批量写入,因为每次写入的时候,容器都会进行复制,如果能够减少写入的次数,就可以减少容器的复制次数在 JUC 包下,实现 CopyOnWrite 思想的就是 CopyOnWriteArrayList & CopyOnWriteArraySet 这两个方法,本篇文章侧重于讲清楚 CopyOnWriteArrayListCopyOnWriteArrayList 中,需要注意的是 add 方法:在写的时候需要加锁,但是在读取的时候不需要添加因为读取的是原数组的元素,对新数组没有什么影响,加了锁反而会增加性能开销CopyOnWriteJUC 包下,那么它就保证了线程安全咱们来做个小 demo 验证一下:上面是客户端请求 5000 次,有 200 个线程在同时请求,我使用的是 ArrayList 实现,咱们看下打印结果:如果是线程安全的话,那么最后的结果应该是 5000 才对,多运行几次你会发现,每次程序的执行结果都是不一样的如果是 CopyOnWriteArrayList 呢?关于“Java的CopyOnWrite怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Java的CopyOnWrite怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: 微信小程序视图容器movable-area怎么用

小编给大家分享一下微信小程序视图容器movable-area怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 基础库 1.2.0 开始支持,低版本需做兼容处理movable-vi免费云主机域名ew 的可移动区域注意:movable-are…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/21 18:29
Next 08/21 18:29

相关推荐