zoukankan      html  css  js  c++  java
  • 并发工具类Hashtable

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

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

    首先是HashTable

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

    Hashtable图解:

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

     

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

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

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

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

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

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

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

     

     所以synchronize的效率很低

    迎风少年
  • 相关阅读:
    去掉苹果设备中按钮的默认样式
    用纯css写三角形
    行内元素中间出现空隙
    控制字间距
    单选按钮只能选中一个
    ie6出现双倍边距的问题
    17-比赛1 B
    ACM模板
    STL 入门 (17 暑假集训第一周)
    UVA 1594 Ducci Sequence(紫书习题5-2 简单模拟题)
  • 原文地址:https://www.cnblogs.com/ZYH-coder0927/p/13525233.html
Copyright © 2011-2022 走看看