阅读这个
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而不是一个易失性变量,因为内存一致性的影响是一样的,意图更加清晰.
原文地址:https://www.jb51.cc/java/121705.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。