赌十包辣条,你一定没见过这么通透的ThreadLocal讲解

       鉴于普罗大众都喜欢看热闹,咱们先来看个热闹再开工吧!

 

赌十包辣条,你一定没见过这么通透的ThreadLocal讲解

场景一: 

中午了, 张三、李四和王五一起去食堂大菜吃饭。食堂刚经营不久,还很简陋,负责打菜的只有一位老阿姨。

 张三:我要一份鸡腿。

 李四:我要一份小鸡炖蘑菇。

 张三:我再要一份红烧肉。

 王五:我要一份红烧排骨。

 李四:我不要小鸡炖蘑菇了,换成红烧鲫鱼。

 王五:我再要一份椒盐虾。

 张三:我再要一份梅菜扣肉。

 ......

 张三:我点的红烧肉,为啥给我打红烧鲫鱼?

 李四:我的红烧鲫鱼呢?

 王五:我有点红烧肉吗?

 ......

 李四:我点了15元的菜,为啥扣我20?

 王五:我点了20元的菜,只扣了我15元,赚了,窃喜!

 张三:我已经刷了卡了,怎么还叫我刷卡?

 ......

 老阿姨毕竟上了年纪,不那么利索,这几个小伙子咋咋呼呼,快言快语,老阿姨也被搅晕了,手忙脚乱,忙中出错,这仨小伙也是怨声载道。

 场景二:

 食堂领导看到这个场景,赶紧要求大家排队,一个一个来。后来,老阿姨轻松多了,也没有再犯错了。

 但是,新的问题又来了,打菜的人当中,很多妹子很磨叽,点个菜犹犹豫豫想半天。

 张三:太慢了,我快饿死了!

 李四:再这么慢,下次去别家!

 王五:我等得花儿都谢啦!

 赵六:啥?我点了啥菜,花了多少钱,其它人怎么都知道?是阿姨多嘴了,还是其它人偷偷关注我很久了?太不安全了,一点隐私都没有,以后不来了。

 ......

 场景三:

  领导听到这些怨言,心里很不是滋味,大手一挥:扩大经营,以后为你们每一个人开一个流动窗口并请一位私人阿姨,只为你一个人服务!

  从此,再也没有怨言,阿姨也没有再犯错了,皆大欢喜......

 

       场景一就像多个线程同时去操作一个数据,最终的结果就是混乱。于是出现了同步锁synchronized,同一时刻只运行一个线程操作,就像场景二,大家先来后到排队,混乱的问题解决了。但是此时一个线程在操作的时候,其它线程只能闲等着,而且这些数据是共享的,每个线程希望拥有只能自己操作的私人数据,ThreadLocal就正好满足了这个需求。

       所以,相比于synchronized,Threadlocal通过牺牲空间来换取时间和效率。

 

2、ThreadLocal简介 

       ThreadLocal官方的介绍为:

1 /** 2 * This class provides thread-local variables. These variables differ from 3 * their normal counterparts in that each thread that accesses one (via its 4 * {@code get} or {@code set} method) has its own, independently initialized 5 * copy of the variable. {@code ThreadLocal} instances are typically private 6 * static fields in classes that wish to associate state with a thread (e.g., 7 * a user ID or Transaction ID). 8 */

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgzyx.html