浅谈ArrayList集合(1)
今天看了一下ArrayList集合的源码,当然了,还是只能看懂一些简单的,太深的看不下去。在我的认知中:ArrayList实现了List接口,ArrayList底层是数组,线程不安全,有序(有下标,存取顺序一致,比如存的第一个元素是a,那ArryList里面a就是在第一个),可重复,查询快,增删慢
今天新get到的就是为什么ArrayList线程是不安全的
它在添加元素的时候有两个步骤
1、先在object(size)上添加一个元素
2、size的长度加1。
如果两个线程同时往里面添加元素,线程1执行了步骤1,但是又没执行到步骤2,此时线程2进来也往同一个位置放元素,实际上两个元素都放在了一个位置,线程1的元素被覆盖掉了,但是size+1还是会执行,这样就只插入一个元素,但是执行了两次size+1
顺便附上一张关系图(图片出自:B站动力节点杜老师的教程视频)
作者:天下没有收费的bug
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。