为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第9天 ThreadLocal学习

标签:
Java

课程名称:ThreadLocal

课程章节:

第3章 【极客视角】大神们怎么用ThreadLocal的

第4章 【设计者视角】源码级实现&源码分析

主讲老师:求老仙

课程内容:

    SimpleSemaphore 信号量源码、mybatis框架、Spring框架分布式事务支持源码分析;

简单实现ThreadLocal练习。

课程收获:

1、SimpleSemaphore

https://img1.sycdn.imooc.com//631fdab200017e6815700857.jpg

Quartz的SimpleSemaphore提供资源隔离;

SimpleSemaphore中的lockOwners(ThreadLocal)为重度锁操作前置过滤。


2、mybatis sqlsession使用threadlocal保证事务

本地事务:

https://img1.sycdn.imooc.com//631fdae00001a80015820866.jpg

A原子性,就是ab两个操作,要么都做,要么都不做。

C一致性,a扣掉的钱和b加上的钱要一致。

I隔离性,多事务并发的顺序,对结果并不影响。

D持久性,对于a扣掉了钱,突然宕机了,b要能保持好一致性。


https://img1.sycdn.imooc.com//631fdb490001918f15810861.jpg


3、哈希表实现ThreadLocal

哈希表(散列HashTable)根据键(key)访问、设置内存中的位置的值。

https://img1.sycdn.imooc.com//631fdb5f0001157a15550840.jpg

解决冲突(方案1):将冲突的部分用链表存储,需要同时将键和值都存入链表。

解决冲突(方案2):如果在位置A发生冲突,那么在它的附近找一个空槽放下(主要需要有规律,不然以后找不到)

(1)可以引入链表解决哈希冲突,如果槽很大,则Map占用的内存就越大,因此槽不是越大越好

(2)、能将数据散列的更分散的哈希函数更好

(3)、数据散列集中的危害是查询数据时的时间复杂度比较高


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消