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

关于线程安全List读时加锁的问题

关于线程安全List读时加锁的问题

POPMUISE 2019-03-20 14:19:20
Vector或Collections.synchronizedList为什么get方法要加锁?CopyOnWriteArrayList并没有。我觉得读的时候不加锁应该没问题吧?读时候加锁有什么意义?能确保读到最新值?那么直接给Object[] elementData加volatile关键字保证可见性。我也知道CopyOnWriteArrayList修改是每次重新建一个elementData,但就算不是重新建,读时不加锁有什么问题?请赐教。//以下是CopyOnWriteArrayList的代码:@SuppressWarnings("unchecked")private E get(Object[] a, int index) {    return (E) a[index];}/** * {@inheritDoc} * * @throws IndexOutOfBoundsException {@inheritDoc} */public E get(int index) {    return get(getArray(), index);}//以下是Vector的代码:public synchronized E get(int index) {    if (index >= elementCount)        throw new ArrayIndexOutOfBoundsException(index);    return elementData(index);}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 325 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号