HashTable
最初は、すべてのメソッドが同期されていると思いました。Java ドキュメントを調べたところ、どのメソッドも同期化されていると宣言されていないことがわかりました。では、JAVAHashTable
オブジェクトが同期されていると定義されている正確な場所はどこでしょうか?
5 に答える
ほとんどのメソッドは同期されています。ソース ファイルを調べると、同期キーワードが表示されます。
のソースを見るHashtable
と、反復または追加または削除に使用するクラスのすべてのメソッドが であることがわかります。したがって、同期さsynchronized
れていると言えます。Hashtable
javadoc: の java.util.Hastable:
* 新しいコレクションの実装とは異なり、{@code Hashtable} は同期されます。
メソッドは同期されています!
クラスの説明の最後の行は次のように述べています
Java 2 プラットフォーム v1.2 以降、このクラスは Map インターフェースを実装するように改良され、Java Collections Framework のメンバーになりました。新しいコレクションの実装とは異なり、Hashtable は synchronizedです。スレッドセーフな実装が必要ない場合は、Hashtable の代わりに HashMap を使用することをお勧めします。スレッドセーフな高度な並行実装が必要な場合は、Hashtable の代わりに ConcurrentHashMap を使用することをお勧めします。
(強調追加)
Hashtable は元のユーティリティ コレクションの 1 つであり、それらはすべて同期されています。すべてのメソッドの前のJavadocの説明から: "