课程名称:ThreadLocal
课程章节:
第3章 【极客视角】大神们怎么用ThreadLocal的
第4章 【设计者视角】源码级实现&源码分析
主讲老师:求老仙
课程内容:
SimpleSemaphore 信号量源码、mybatis框架、Spring框架分布式事务支持源码分析;
简单实现ThreadLocal练习。
课程收获:
1、SimpleSemaphore
Quartz的SimpleSemaphore提供资源隔离;
SimpleSemaphore中的lockOwners(ThreadLocal)为重度锁操作前置过滤。
2、mybatis sqlsession使用threadlocal保证事务
本地事务:
A原子性,就是ab两个操作,要么都做,要么都不做。
C一致性,a扣掉的钱和b加上的钱要一致。
I隔离性,多事务并发的顺序,对结果并不影响。
D持久性,对于a扣掉了钱,突然宕机了,b要能保持好一致性。
3、哈希表实现ThreadLocal
哈希表(散列HashTable)根据键(key)访问、设置内存中的位置的值。
解决冲突(方案1):将冲突的部分用链表存储,需要同时将键和值都存入链表。
解决冲突(方案2):如果在位置A发生冲突,那么在它的附近找一个空槽放下(主要需要有规律,不然以后找不到)
(1)可以引入链表解决哈希冲突,如果槽很大,则Map占用的内存就越大,因此槽不是越大越好
(2)、能将数据散列的更分散的哈希函数更好
(3)、数据散列集中的危害是查询数据时的时间复杂度比较高