C/C++教程

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

本文主要是介绍【九月打卡】第9天 ThreadLocal学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程名称: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://img4.sycdn.imooc.com/631fdae00001a80015820866.jpg

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

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

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

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


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


3、哈希表实现ThreadLocal

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

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

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

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

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

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

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


这篇关于【九月打卡】第9天 ThreadLocal学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!