加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java volatile变量问题

发布时间:2020-12-14 05:40:55 所属栏目:Java 来源:网络整理
导读:阅读这个 DZone article关于Java并发我想知道如果以下代码: private volatile List list; private final Lock lock = new ReentrantLock(); public void update(List newList) { ImmutableList l = new ImmutableList().addAll(newList); lock.lock(); list
阅读这个 DZone article关于Java并发我想知道如果以下代码:
private volatile List list;
    private final Lock lock = new ReentrantLock();

    public void update(List newList) {
        ImmutableList l = new ImmutableList().addAll(newList);
        lock.lock();
        list = l;
        lock.unlock();
    }

    public List get() {
        return list;
    }

相当于:

private volatile List list;

    public void update(List newList) {
        ImmutableList l = new ImmutableList().addAll(newList); 
        list = l;
    }

    public List get() {
        return list;
    }

为了简洁,省略了try {} finally {}块.我假设ImmutableList类是一个真正不变的数据结构,它保存着自己的数据,比如google收藏库中提供的数据.由于列表变量是不稳定的,并且基本上发生了什么事情是一个即时复制,是不是可以安全地跳过使用锁?

解决方法

在这个非常具体的例子中,我认为你可以没有锁定变量重新分配.

一般来说,我认为你最好使用AtomicReference而不是一个易失性变量,因为内存一致性的影响是一样的,意图更加清晰.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读