【发布时间】:2014-06-17 12:13:43
【问题描述】:
假设我们有这个类
final class Foo {
private final Set<String> bar = new HashSet<>();
public Foo() {
bar.add("one");
bar.add("two");
bar.add("three");
}
public boolean contains(final String s) {
return bar.contains(s);
}
}
实例化Foo 并从多个线程调用此对象的contains 是否是线程安全的?
- 对集合的引用是
private和final。没有人可以直接访问该集合。 - 唯一的写访问发生在构造函数中
- 构造函数执行后,集合只读取不修改。
如果没有,是否有纯 Java 替代 Guava 的不可变集合?
【问题讨论】:
-
我会说这是线程安全的。继承可能会引入其他细微差别,但我会在晚上睡觉。
-
@Joe,你是对的。这个问题完全一样。如果可以,请关闭我的问题。
标签: java concurrency