【发布时间】:2016-03-11 13:08:34
【问题描述】:
我有一些代码如下:
class MyClass {
private Set<Integer> set = new HashSet<>();
public void checkAndAddToSet(Integer i) {
if (!set.contains(i)) {
set.add(i);
}
public void checkAndRemove(Integer i) {
if (set.contains(i)) {
set.remove(i);
}
}
}
我需要代码是线程安全的,所以我有两个选择,我可以在这个类的当前实例上synchronize,即synchronized(this),或者我可以在Set实例上同步,即@987654325 @。
这里哪个是更好的选择?我倾向于在数据结构对象set 上进行同步,但这只是因为将来我可能需要在类中进行进一步的同步,但使用不同的对象锁。
【问题讨论】:
-
我认为防范
set就足够了。另外,考虑将set定为最终版本。需要拨打contains()吗?Set接口的契约(由HashSet满足)已经检查并返回布尔值以向调用者传达它所做的事情。 -
那么,你找到答案了吗?
标签: java multithreading