为了账号安全,请及时绑定邮箱和手机立即绑定

Java 中ArrayList的线程安全问题

Java 中ArrayList的线程安全问题

江户川乱折腾 2018-07-15 10:09:17
有两个线程操作一个ArrayList A线程会执行list.clear();B线程会执行if(!list.isEmpty()){    list.get(list.size() - 1).xxx();}如果B线程进入了if 代码块时候阻塞了 而此时A线程执行了clear方法  那么B线程再次执行的时候就会报下标越界-1 这种情况下  应该如何同步代码?
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

synchronized你就没必要在这解释什么意思了,没说你这不行,只是说vector和ConcurrentLinkedDeque完全可以解决这个问题,vector的lastElement和ConcurrentLinkedDeque的pollLast方法直接就返回最后的值了,不需要判断isEmpty,里面都有判断了,说半天你还没明白,还在这解释synchronized的用法

查看完整回答
反对 回复 2018-07-15
?
Qyouu

TA贡献1786条经验 获得超11个赞

Vector的大部分方法都是同步的,且与ArrayList几乎使用了相同的算法。性能也相差无几。建议使用Vector替代ArrayList

查看完整回答
反对 回复 2018-07-15
  • 2 回答
  • 0 关注
  • 1437 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信