我讀過哈希表是線程安全的,因爲它是同步的。考慮這段代碼片段哈希表中的哈希表和同步
if(!hashtable.contains(key)){
hashtable.put(key,value);
}
散列表上的操作可能不同步。例如,如果Thread t1
訪問hastable並檢查密鑰,並且同時Thread t2
檢查密鑰,則在t1執行put之前。現在兩個線程位於if塊的內部並且發生鍵值覆蓋。
所以同步塊是必要的。
synchronized {
if(!hashtable.contains(key)){
hashtable.put(key,value);
}
}
這種理解是否正確?或者對可操作的操作安全可靠。當我讀到這個時,我有這個疑問post on race condition
是的,這是正確的。 – SJuan76