java hashtable 并发_并发工具类Hashtable

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

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

首先是HashTable

Hashtable采用悲观锁SYNchronized的形式保证数据的安全性

只要有线程访问,会将整张表全部锁起来,所以Hashtable的效率低下

Hashtable图解:

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

73f37efc21bab3af2563eda4852ba077.png

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

19ba983512cf7a6d6d9883275833cf9d.png

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

66debfebd1390c864dd108a43fec5411.png

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

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

a222e6e83ae3e2065500214eb54310f3.png

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

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

11710d8a27e3e1ccdc1b0b6223d89bf8.png

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

03511315ed054f4ea081d2d99a818a5e.png

db32ac55fa26c359537e9cf1a84fe911.png

b2d9f13cfc073afe82d6b13866d722e6.png

所以synchronize的效率很低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值