首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步同步列表

同步同步列表
EN

Stack Overflow用户
提问于 2016-09-27 10:30:19
回答 2查看 1.1K关注 0票数 4

如果我有这样的片段-

代码语言:javascript
复制
public List<E> list =  Collections.synchronizedList(new ArrayList<E>());

如果我在一个方法里做一些操作-

代码语言:javascript
复制
boolean absent = !list.contains(x);             // Statement 1
if(absent)                                      // Statement 2
    list.add(x);                                // Statement 3

我是否需要将上述语句包装在synchronized(list){ ... }中,以使操作atomic

EN

回答 2

Stack Overflow用户

发布于 2016-09-27 10:33:39

是的,同步列表使方法调用是原子的,但是如果要使多个语句具有原子性(例如,迭代列表等),则需要同步访问。

票数 2
EN

Stack Overflow用户

发布于 2016-09-27 10:33:12

对,是这样。理论上,语句1和3之间的任何事情都可能发生;因此:如果您希望它们发生“原子”,那么您需要某种方法将它们转化为“单个事务”。

使用synchronized(list)是实现这一目标的合理方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39722335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档