最終的で不変の がEnumSet
あります。つまり、コンストラクターで一度初期化されます。
このスレッドのcontains()
メソッドは安全ですか? EnumSet
内部的にイテレータを使用して内容チェックを行っています。したがって、2 つのスレッドが同時に を呼び出している場合contains()
、1 つの呼び出しでのイテレータの位置が他のスレッドに影響を与える可能性がありますか? それとも、これら 2 つのスレッド呼び出しでイテレータのインスタンスが異なるのでしょうか?
最終的で不変の がEnumSet
あります。つまり、コンストラクターで一度初期化されます。
このスレッドのcontains()
メソッドは安全ですか? EnumSet
内部的にイテレータを使用して内容チェックを行っています。したがって、2 つのスレッドが同時に を呼び出している場合contains()
、1 つの呼び出しでのイテレータの位置が他のスレッドに影響を与える可能性がありますか? それとも、これら 2 つのスレッド呼び出しでイテレータのインスタンスが異なるのでしょうか?
anの内容は、それが final であるという参照EnumSet
に関係なく変更できます。いいえは不変です。ただし、via をラップすることはできます。オリジナルへの参照を一切保持しない場合、変更不可能なラッパー オブジェクトは機能的に不変になります。EnumSet
EnumSet
Collections.unmodifiableSet()
EnumSet
可変性にもかかわらず、が変更されないSet
限り、2 つの反復子が同時に同じ操作を行っても問題Set
はありません。これは、イテレータが 1 つの場合とまったく変わりません。
いずれにせよ、可能性のあるcontains()
メソッドはEnumSet
イテレータを作成または使用しません。クラスはビット ベクトルを介してメンバーシップを実装するため、ビット操作を使用してcontains()
テストを実行します。