簡體   English   中英

為什么Java的HashTable是同步的?

[英]Why is Java's HashTable synchronized?

使HashTable的方法同步的驅動因素或設計計划是什么?

鏈接表示HashTable已同步,因為其方法已同步。 但是,我想知道為什么“為什么”同步這些方法的原因?

僅僅是為了提供一些同步功能? 開發人員可以通過同步技術顯式處理競爭條件。 為什么要為HashTable提供此功能?

請記住:這些類是在“年齡”之前創建的-檢查Hashtable的javadoc時,會發現它說“自Java 1.0起”; 而HashMap則說“ 1.2”!

那時,Java試圖與C和C ++之類的語言競爭。 通過提供獨特的賣點,例如“內置並發”。

但是人們很快意識到,在多線程環境中使用容器時,可以更好地同步容器!

因此,我的回答(更多基於觀點)是:在設計此類時,人們認為“可以被多個線程使用”的要求比“提供最佳性能”更為重要。

因為Java被“宣傳”為:“使用Java編寫多線程,一次編寫到處運行的代碼”。 當給人們的默認容器類需要額外的外部包裝以使它們“多線程”就緒時,該方法將很快失敗。

這些年來,Java背后的人們開始理解需要“更細化”的解決方案。 因此,核心集合類將不同步以避免相應的性能損失。 含義:集合的默認設置為“不受保護”; 因此,當您的要求是“多線程”正確性時,您必須考慮一下。

相同於“列表”,順便說一句:矢量已同步; ArrayList不是。

我們無法告訴您原因。 二十多年前設計Java的人也許可以。 這不是一個有用的問題。 假設您實際上是想詢問java.util.Hashtable而不是虛構的HashTable類型,請記住,它已經過時了19年。 十九年! 不要使用它。 它(和Vector )有一個問題,即替換類型(同步和非同步)都不攜帶。 使用現代(截至19年前)類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM