作者:讲述华哥传奇的生活_616 | 来源:互联网 | 2023-02-07 08:46
使HashTable方法同步的驱动因素或设计方案是什么?
此链接表示HashTable已同步,因为它的方法已同步.但是,我想知道"为什么"这些方法同步的原因?
它只是提供一些同步功能吗?开发人员可以通过同步技术显式处理竞争条件.为什么要为HashTable提供此功能?
1> GhostCat say..:
请记住:这些类是在"年龄"之前创建的 - 当您检查javad的Havad时,您会发现它"自Java 1.0以来"; 而HashMap说"1.2"!
那时,Java试图与C和C++等语言竞争; 通过提供独特的卖点,如"内置并发".
但人们很快就发现,在多线程环境中使用容器时,可以更好地同步容器!
所以我的(更多基于意见的)答案是:在这个类首次设计时,人们认为"可以由多个线程使用"的要求比"给出最佳性能"更重要.
因为Java被"广告"如:"用它来编写多线程写入一次运行代码".当给予人们的默认容器类需要额外的外部包装以实际使它们"多线程"准备就绪时,该方法很快失败.
多年来,Java背后的人们开始明白需要"更细粒度"的解决方案.因此,核心集合类不会同步以避免相应的性能命中.含义:集合的默认值是"不受保护"; 因此,当您的要求是"多线程"正确性时,您必须提出一些想法.
"list"btw相同:Vector是同步的; ArrayList不是.