社区
Java SE
帖子详情
JAVA中ArrayList是否允许两个线程同时进行插入和删除操作?
younerest
2011-08-09 12:42:42
RT
...全文
854
14
打赏
收藏
JAVA中ArrayList是否允许两个线程同时进行插入和删除操作?
RT
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BadPattern
2011-08-10
打赏
举报
回复
当然不允许了,两个线程同时对ArrayList进行结构修改会导致数据结构有问题。
Mybeautiful
2011-08-10
打赏
举报
回复
允许,但是可能出问题,如楼上各位所说。
cstur4
2011-08-10
打赏
举报
回复
你可以看ArrayList的源码啊 都没有synchronized关键字 所以不行 Vector的方法就都同步了,当然效率也比ArrayList低
qybao
2011-08-09
打赏
举报
回复
允许,不过因为不是同步,所以同时删除可能会出错,即某个线程删完了,另一个线程再删可能会抛出越界异常
qyqyq
2011-08-09
打赏
举报
回复
span.score{
color: #F7A600;
font-style: italic;
font-weight: bold;
font-size: 25px;
}
<span id="rateScore" class="score">支持4楼</span>
qqhw123
2011-08-09
打赏
举报
回复
[Quote=引用 9 楼 huqifei 的回复:]
建议加锁同步处理,避免多个线程就可以有序的访问list了。
synchronized
[/Quote]
+1
huqifei
2011-08-09
打赏
举报
回复
建议加锁同步处理,避免多个线程就可以有序的访问list了。
synchronized
huntor
2011-08-09
打赏
举报
回复
可以使用 CopyOnWriteArrayList
softroad
2011-08-09
打赏
举报
回复
不同步会异常的。
wenbodong
2011-08-09
打赏
举报
回复
不错,自己实现同步不就得了
grubby4k
2011-08-09
打赏
举报
回复
可以你手工加同步嘛
daijope
2011-08-09
打赏
举报
回复
Vector的好处在于可以是线程安全的,像ArrayList,我们添加一个元素时,先要把下标加1,然后再赋值,所以如果有多个线程同时向一个ArrayList里面添加东西时,由于不是线程安全的所以就有可能出错。我们这时要用ArrayList的话,必须保证ArrayList的add操作必须是线程安全的,要放在synchronized 中,,,,
ilrxx
2011-08-09
打赏
举报
回复
不可以的,无论更新或者查询同时操作都有可能出问题或者异常结果,建议用vector或者List list = Collections.synchronizedList(new ArrayList(...));
peng658890
2011-08-09
打赏
举报
回复
学习中 等待高手回答!
think in
java
线程
和容器2
java
线程
中
容器使用技术,比如List接口是在Collection的基础上添加了大量方法,有两种基本类型:
ArrayList
,它擅⻓于随机访问元素,但是List
中
间
插入
或移除元 素时较慢;LinkedList,它和
ArrayList
的特性正好相反。所以在写程序时最好把
插入
和取数据的
操作
放在
两个
方法
中
来实现。为了遍历,
JAVA
定义了迭代器Iterator,它只能向后遍历,它有一个子类ListIterator,它只适用于List类的访问,它还可以双向移动。
java
并发包&
线程
池原理分析&锁的深度化
并发包 同步容器类 Vector与
ArrayList
区别 1.
ArrayList
是最常用的List实现类,内部是通过数组实现的,它
允许
对元素
进行
快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间
中
。当从
ArrayList
的
中
间位置
插入
或者
删除
元素时,需要对数组
进行
复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合
插入
和
删除
。 2.Vector与
ArrayList
一样,也是通过数组实现的,不同的是它支持
线程
的同步,即某一时刻只有一个
线程
能够写Vector,避免多
线程
同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问
ArrayList
慢 注意: Vector
线程
安全、
ArrayList
并发队列 在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队 列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。
Java
进阶课程系列之
ArrayList
集合底层源码实战分析
ArrayList
是一种变长的集合类,基于定长数组实现。
ArrayList
允许
空值和重复元素,当往
ArrayList
中
添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。另外,由于
ArrayList
底层基于数组实现,所以其可以保证在 O(1) 复杂度下完成随机查找
操作
。其他方面,
ArrayList
是非
线程
安全类,并发环境下,多个
线程
同时
操作
ArrayList
,会引发不可预知的错误。 本节课程会带着大家去学习集合底层源码是什么个结构,他在做什么事情,能做到什么事情,会出现的问题以及解决方法,希望同学能够仔细听,详细你会收到丰富的回报的
关于
Java
中
ArrayList
线程
不安全的思考
在平时日常开发
中
,经常会根据不同的应用场景,使用到许多集合类比如List、Set、Map这些。对于个人而言,应用最为频繁的要数
ArrayList
,然而在偶然的一次机会接触到了一个这样的问题:
ArrayList
是否
线程
安全,如果不安全要怎么让它
线程
安全? 这个问题让我一整晚都百思不得其解,遂翻阅源码,啃之。
ArrayList
线程
是否
安全? 通过源码注释的第一段就可以得知,这个
ArrayList
大致上都跟Vector差不多,唯一不同就是不是同步的。这个时候又引申出了一个叫做Vector的集合。 V
java
arraylist
插入
,在
Java
中
的
ArrayList
中
间添加元素
可以使用
java
.util.
ArrayList
.add()方法将元素添加到
ArrayList
的
中
间。此方法有
两个
参数,即在
ArrayList
中
插入
元素的索引和元素本身。如果在
ArrayList
.add()指定的索引处已经存在一个元素,则该元素和所有后续元素向右移动一个。演示此的程序如下所示-示例import
java
.util.
ArrayList
;import
java
.util.List;pub...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章