如果我有这样的片段-
public List<E> list = Collections.synchronizedList(new ArrayList<E>());如果我在一个方法里做一些操作-
boolean absent = !list.contains(x); // Statement 1
if(absent) // Statement 2
list.add(x); // Statement 3我是否需要将上述语句包装在synchronized(list){ ... }中,以使操作atomic
发布于 2016-09-27 10:33:39
是的,同步列表使方法调用是原子的,但是如果要使多个语句具有原子性(例如,迭代列表等),则需要同步访问。
发布于 2016-09-27 10:33:12
对,是这样。理论上,语句1和3之间的任何事情都可能发生;因此:如果您希望它们发生“原子”,那么您需要某种方法将它们转化为“单个事务”。
使用synchronized(list)是实现这一目标的合理方法。
https://stackoverflow.com/questions/39722335
复制相似问题