首页 > 其他 > 详细

Hashmap和Hashtable区别

时间:2019-06-14 21:39:45      阅读:113      评论:0      收藏:0      [点我收藏+]
HashMap和Hashtable都实现了Map接口
 
区别有:线程安全性,同步(synchronization),以及速度
 
HashMap是非synchronized的,可以接受为null的键值(key)和值(value)
HashMap不能保证随着时间的推移Map中的元素次序是不变的
 
Hashtable是synchronized,Hashtable是线程安全的,多个线程可以共享一个Hashtable
如果没有正确的同步的话,多个线程是不能共享HashMap
 
因为Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,那么使用HashMap性能比Hashtable好
 
线程安全:就是当多线程访问时,采用了加锁的机制;即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读取完之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。
 
线程不安全:就是不提供数据访问时的数据保护,多个线程能够同时操作某个数据,从而出现数据不一致或者数据污染的情况。
 
对于线程不安全的问题,一般会使用synchronized关键字加锁同步控制
 
线程安全 工作原理: jvm中有一个main memory(主储存器)对象,每一个线程也有自己的working memory(工作记忆),一个线程对于一个变量variable进行操作的时候, 都需要在自己的working memory里创建一个copy,操作完之后再写入main memory。
 
当多个线程操作同一个变量variable,就可能出现不可预知的结果。
 
而用synchronized的关键是建立一个监控monitor,这个monitor可以是要修改的变量,也可以是其他自己认为合适的对象(方法),然后通过给这个monitor加锁来实现线程安全,每个线程在获得这个锁之后,要执行完加载load到working memory 到 use && 指派assign 到 存储store 再到 main memory的过程。才会释放它得到的锁。这样就实现了所谓的线程安全。
 
 
 

Hashmap和Hashtable区别

原文:https://www.cnblogs.com/jiqu/p/11025528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!