【发布时间】:2016-09-27 10:30:19
【问题描述】:
如果我有这样的sn-p-
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 的操作吗?
【问题讨论】:
-
我不认为这个问题是链接中给出的问题的倍数。这个要求同步列表中的代码块,而另一个是关于同步单个方法调用。甚至他们的答案也不同(对此有必要,对另一个没有必要)。
-
@uoyilmaz 这是一个规范,涵盖了使用
synchronized和synchronizedList方法的用例。而answers 也涵盖了这一点:如果块在列表上执行多个操作 [...] 那么同步不是多余的
标签: java multithreading