ハッシュテーブルは同期されているため、スレッドセーフであると読みました。このコードスニペットを検討してください
if(!hashtable.contains(key)){
hashtable.put(key,value);
}
ハッシュテーブルの操作は同期されていない可能性があります。たとえば、t1 が put を実行する前にThread t1
、hastable にアクセスしてキーをチェックし、同時にキーをチェックする場合。Thread t2
現在、2 つのスレッドが if ブロック内にあり、キー値の上書きが発生しています。
そのため同期ブロックが必要です。
synchronized {
if(!hashtable.contains(key)){
hashtable.put(key,value);
}
}
この理解は正しいでしょうか?または、hastables に対して実行される操作に対して hastables safe です。競合状態に関するこの投稿を読んでいるときに、この疑問が生じました