继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

逆流的鱼_飞
关注TA
已关注
手记 24
粉丝 1
获赞 0

课程名称:ThreadLocal

课程章节:

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

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

主讲老师:求老仙

课程内容:

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

简单实现ThreadLocal练习。

课程收获:

1、SimpleSemaphore

http://img1.mukewang.com/631fdab200017e6815700857.jpg

Quartz的SimpleSemaphore提供资源隔离;

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


2、mybatis sqlsession使用threadlocal保证事务

本地事务:

http://img4.mukewang.com/631fdae00001a80015820866.jpg

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

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

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

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


http://img4.mukewang.com/631fdb490001918f15810861.jpg


3、哈希表实现ThreadLocal

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

http://img4.mukewang.com/631fdb5f0001157a15550840.jpg

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

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

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

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

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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP