Java 并发容器 —— Hashtable 与 Collections.synchronizedMap(HashMap) 的区别

18人阅读 评论(0) 收藏 举报
分类:

Hashtable 部分源码

这里写图片描述

以 Hashtable 的 put 方法为例:

Hashtable 保证线程安全的方式在 方法前加上 synchronized 关键字(锁的是类的实例)


Collections.synchronizedMap() 的部分源码

这里写图片描述

Collections.synchronizedMap() 会调用 静态内部类SynchronizedMap 的构造器 SynchronizedMap(Map<K,V> m), synchronized 关键字作用的对象mutex 被设置为 this(即类实例)

这里写图片描述


静态内部类 SynchronizedMap 的另一个构造方法 SynchronizedMap(Map<K,V> m, Object mutex) 是传入一个 Object 作为 mutex,可以将此 Object 作为 synchronized 修饰的对象


总结:

1、默认 Hashtable 和 synchrnizedMap 都是锁 类实例,synchrnizedMap 可以选择锁其他的 Object(mutex)

2、Hashtable 的 synchronized 是方法级别的;synchrnizedMap 的 synchronized 的代码块级别的

3、两者性能相近,但是 synchrnizedMap 可以用 null 作为 key 和 value


参考资料:

1、Difference between Hashtable and Collections.synchronizedMap(HashMap)
https://stackoverflow.com/questions/8875680/difference-between-hashtable-and-collections-synchronizedmaphashmap

2、JDK1。8 源码


查看评论

【UI】第二周 AI软件基础与字体设计

-
  • 1970年01月01日 08:00

ConcurrentHashMap、Collections.synchronizedMap、Hashtable的区别与讨论

java集合框架java1.5新特性 ConcurrentHashMap、Collections.synchronizedMap、Hashtable讨论 在Java类库中出现的第一个关联的集...
  • min954584739
  • min954584739
  • 2017-06-20 15:07:35
  • 273

Hashtable 和 HashMap和concurrentHashMap和collections.synchronizedMap

java5的java.util包提供了大量集合类。其中最常用的集合类有List、Set、Map等。这篇文章主要介绍其中的Map。 首先,来看下java.util包中Map相关的集合类的类图(见附件中...
  • gzp007
  • gzp007
  • 2015-09-01 15:45:55
  • 815

Collections.synchronizedMap()与ConcurrentHashMap的区别

Collections.synchronizedMap()与ConcurrentHashMap主要区别是:Collections.synchronizedMap()和Hashtable一样,实现上在调...
  • lanxiangru
  • lanxiangru
  • 2016-12-07 00:13:14
  • 9577

HashMap,Hashtable,ConcurrentHashMap 和 synchronized Map 的原理和区别

博客原文地址:http://yemengying.com/2016/05/07/threadsafe-hashmap/ HashMap 是否是线程安全的,如何在线程安全的前提下使用 HashMap,...
  • cpcpcp123
  • cpcpcp123
  • 2016-10-06 17:46:39
  • 841

Java集合——HashMap、HashTable以及ConCurrentHashMap异同比较

HashMap和HashTable的区别一种比较简单的回答是: (1)HashMap是非线程安全的,HashTable是线程安全的。 (2)HashMap的键和值都允许有null值存在,而HashTa...
  • SEU_Calvin
  • SEU_Calvin
  • 2016-09-25 15:56:41
  • 21750

Java 关于HashTable和SynchronizedMap线程安全的分析

源码阅读一次又一次,总是知识容易混淆,先记录的引子,日后补充完成博文! HashTable线程安全原因:所有存在线程安全的方法都使用synchronized关键字进行修饰,此时获取的是方法调...
  • Dax1n
  • Dax1n
  • 2017-07-05 22:45:00
  • 257

java集合框架12——HashMap和HashTable的区别

前面已经学习了Map的部分内容,主要是HashMap和HashTable,这一节我们来看看它们两有啥异同点。 1. HashMap和HashTable的相同点         HashMap和Hash...
  • eson_15
  • eson_15
  • 2016-04-26 15:50:35
  • 3555

从Java源码的角度来分析HashMap与HashTable的区别

由于HashMap与HashTable都是用来存储Key-Value的键值对,所以经常拿来对比二者的区别,下面就从源码的角度来分析一下HashMap与HashTable的区别,...
  • a_woxinfeiyang_a
  • a_woxinfeiyang_a
  • 2016-06-02 17:49:11
  • 1523

ConcurrentHashMap Collections.synchronizedMap和Hashtable讨论

在Java类库中出现的第一个关联的集合类是Hashtable,它是JDK1.0的一部分。 Hashtable提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代...
  • zmx729618
  • zmx729618
  • 2016-11-22 16:37:38
  • 277
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 52万+
    积分: 1万+
    排名: 1170
    博客专栏
    最新评论