使HashTable的方法同步的驱动因素或设计计划是什么?
这个链接说 HashTable 是同步的,因为它的方法是同步的。但是,我想知道方法“为什么”同步的原因?
仅仅是为了提供一些同步功能吗?开发人员可以通过同步技术显式地处理竞争条件。为什么要为 HashTable 提供这个功能?
请记住:这些类是在“很久以前”创建的 - 当您检查Hashtable的 javadoc 时,您会发现它说“自 Java 1.0”;而 HashMap 说的是“1.2”!
那时,Java 正试图与 C 和 C++ 等语言竞争。通过提供独特的卖点,例如“内置并发”。
但是人们很快发现,在多线程环境中使用容器时,可以更好地同步容器!
所以我的(更多是基于意见的)答案是:在这个类最初设计的时候,人们认为“可以被多个线程使用”的要求比“提供最佳性能”更重要。
因为 Java 被“宣传”为:“用它来编写多线程一次编写到处运行的代码”。当提供给人们的默认容器类需要额外的外部包装来真正使他们“多线程”准备好时,这种方法很快就会失败。
这些年来,Java 背后的人们开始明白需要“更细化”的解决方案。因此核心集合类不会同步以避免相应的性能下降。含义:集合的默认设置是“不受保护”;因此,当您的要求是“多线程”正确性时,您必须考虑一下。
顺便说一句,“列表”也是如此:向量是同步的;ArrayList 不是。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句