请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

CopyOnWriteArrayLis的一个小疑问

老师好!
CopyOnWriteArrayList读操作时为什么还要再进行一次getArray(),直接return array[index]不好吗?
http://img1.sycdn.imooc.com//szimg/5c3c4573000154ac15000309.jpg
http://img1.sycdn.imooc.com//szimg/5c3c45720001957204280134.jpg

正在回答 回答被采纳积分+3

1回答

Jimin 2019-01-14 21:42:39

你好,能注意到这里的细节,给你点赞!

get()方法直接调用内部的getArray()方法,而getArray()方法则直接返回成员变量array。这里 array指向一个数组,是CopyOnWriteArrayList的内部数据结构:private transient volatile Object[] array;

这样设计的重点在于:
array是一个volatile变量,其读、写操作具有Happends-Before关系。具体来讲,线程W1通过set()方法“修改”集合后,线程R1能立刻通过get()方法得到array的最新值。

0 回复 有任何疑惑可以回复我~
  • 提问者 朱小悬 #1
    老师,您好!
    我认认真真地看完您的每一个字,还是不明白
    return get(getArray(),index)和
    return array[index]两者的区别。
    
    array是被volatile修饰的,那
    return array[index]会和
    return get(getArray(),index)哪里不同了
    回复 有任何疑惑可以回复我~ 2019-01-15 15:10:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信