V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brucefu
V2EX  ?  Java

Vector 的 get 方法为什么也要同步呢?

  •  
  •   brucefu · 2021-02-03 08:38:13 +08:00 · 2180 次点击
    这是一个创建于 1188 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    不修改数据也要同步方法吗?不同步有问题?可见性问题? public synchronized E get(int index) { if (index >= elementCount) throw new ArrayIndexOutOfBoundsException(index);

        return elementData(index);
    }
    
    10 条回复  ?  2021-02-03 13:25:03 +08:00
    yRebelHero
        1
    yRebelHero  
       2021-02-03 09:14:25 +08:00
    如果其他线程在该线程获取链表之后变更了链表呢?
    yRebelHero
        2
    yRebelHero  
       2021-02-03 09:16:01 +08:00
    对不起,是数组,脑抽了一下。
    palmers
        3
    palmers  
       2021-02-03 09:17:25 +08:00
    是 可见性问题 因为内部数组没有使用 volatile 修饰, 多线程下公用实例就会有获取到错误的数据的可能性
    nicocho
        4
    nicocho  
       2021-02-03 09:18:44 +08:00
    @yRebelHero 是这样的,但是 vector 不是基于数组的么。
    nicocho
        5
    nicocho  
       2021-02-03 09:20:44 +08:00
    @yRebelHero 最近在复习数据结构,对这些有点执拗 , 哈哈
    340244120w
        6
    340244120w  
       2021-02-03 09:28:57 +08:00
    并发编程实践 3.1.3

    锁不仅仅是关于同步与互斥的,也是关于内存可见的。为了保证所有线程都能 够看到共享的、可变变量的最新值,读取和写入线程必须使用公共的锁进行同步。
    kzaemrio
        7
    kzaemrio  
       2021-02-03 11:18:36 +08:00
    因为你无法确定是否会出现多线程修改了数据,多线程访问可能获取不同的结果

    如果能确定线程安全,就该用 ArrayList 而不是 Vector
    yRebelHero
        8
    yRebelHero  
       2021-02-03 11:25:51 +08:00
    @nicocho 我下面马上更正了一下,刚开始的时候脑抽打错了。
    brucefu
        9
    brucefu  
    OP
       2021-02-03 13:08:36 +08:00
    @kzaemrio 你在巴巴什么,八股文背多了吧
    spinecho
        10
    spinecho  
       2021-02-03 13:25:03 +08:00
    Vector 这玩意只有在面试中才用吧。你们写代码用 Vector 吗?好奇
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3174 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 13:22 · PVG 21:22 · LAX 06:22 · JFK 09:22
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com