首页 > 其他 > 详细

并发工具类Hashtable

时间:2020-08-18 20:15:20      阅读:83      评论:0      收藏:0      [点我收藏+]

在多线程中如果需要用到集合则不能使用HashMap,Arrlist等集合,在多线程的操作中容易出现错误。

因此java为我们提供了几个并发工具类包括Hashtable,concurrentHashMap,CountDownLatch和Semaphore

首先是HashTable

  • Hashtable采用悲观锁SYNchronized的形式保证数据的安全性
  • 只要有线程访问,会将整张表全部锁起来,所以Hashtable的效率低下

Hashtable图解:

Hashtable和HashMap一样底层都是哈希表结构包括数组和链表,数组默认长度是16,加载因子是0.75

 技术分享图片

 根据键的哈希值计算出应该存入的索引

 

技术分享图片

 

 计算出的索引的值如果是null则会把值直接存进去把null覆盖

技术分享图片

 

 如果元素根据键值计算出的应该存进的索引已经有值,则会调用equals方法比较属性值,如果属性值一样则不存,

属性值不一样就存进去,老元素挂在新元素的下面

 

技术分享图片

 

 当链表的长度为8时就会自动转化为红黑树

只要有线程来访问,就会整张表全部锁起来:

技术分享图片

 

 Hashtable的源码中成员方法几乎全部被synchronize锁住:

技术分享图片

 

 技术分享图片

 

 

技术分享图片

 

 所以synchronize的效率很低

 

并发工具类Hashtable

原文:https://www.cnblogs.com/ZYH-coder0927/p/13525233.html

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