假设我们有这堂课
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该对象是否是线程安全的?
Foo
contains
private
final
如果没有,是否有一个纯Java替代Guava的不可变集合?
前提是线程安全
1)构造函数不会在完全构造引用之前泄漏其引用。
2)没有人可以使用任何方式访问收藏集。
3)无法创建可以编辑集合的子类。
但是,作为一般规则,如果要实现此功能,请使用番石榴中的不可变集合,这样可以使行为对程序员明确,然后可以安全地返回整个地图。我认为在纯Java中,您可以返回集合的不可修改的视图。