【问题标题】:Where is it defined that a JAVA HashTable object will be synchronized?JAVA HashTable 对象将在哪里同步?
【发布时间】:2012-12-19 18:06:33
【问题描述】:

一开始我以为HashTable的所有方法都是同步的。查找java doc,发现没有一个方法被声明为同步的。那么JAVAHashTable对象究竟在哪里定义为同步呢?

【问题讨论】:

  • 我在看源码,大部分方法都是同步的。 public synchronized V put(K key, V value) {

标签: java multithreading hashtable synchronized


【解决方案1】:

大多数方法都是同步的。如果您查看源文件,您可以看到同步关键字。

【讨论】:

  • 不,文档定义了它;来源是一个实现细节。
【解决方案2】:

如果您查看Hashtablesource,您可以看到我们用于迭代或添加或删除的类的每个方法都是synchronized,因此我们可以说Hashtable是同步的

【讨论】:

  • 感谢您指出。但是对象是如何同步的呢?是不是因为所有的方法都是同步的?
  • 当然。如果您可以对它执行的所有操作都是同步的,那么该对象肯定是同步的。
  • @ambar 同意 Louis 的回答
【解决方案3】:

class description 状态的最后一行

从 Java 2 平台 v1.2 开始,该类被改进为实现 Map 接口,使其成为 Java 集合框架的成员。 与新的集合实现不同,Hashtable 是同步的。如果不需要线程安全的实现,建议使用 HashMap 代替 Hashtable。如果需要线程安全的高并发实现,建议使用 ConcurrentHashMap 代替 Hashtable。

(强调)

【讨论】:

    【解决方案4】:

    Hashtable 是原始实用程序集合之一,所有这些都是同步的。来自所有方法之前的 Javadoc 描述:“从 Java 2 平台 v1.2 开始,该类已被改造为实现 Map,使其成为 Java 集合框架的一部分。与新的集合实现不同,Hashtable 是同步的。 "

    【讨论】:

      【解决方案5】:

      在 javadoc: 中的 java.util.Hastable:

      与新的集合 * 实现不同,{@code Hashtable} 是 同步。

      方法是同步的!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 2015-03-13
        • 1970-01-01
        • 2012-07-09
        • 1970-01-01
        • 2018-02-27
        • 1970-01-01
        相关资源
        最近更新 更多