课程
/后端开发
/Java
/ThreadLocal
原来是把a++这个操作同步起来
现在这个操作,好像也没有简化很多。
这个思路还是没太明白。
2020-02-07
源自:ThreadLocal 2-5
正在回答
锁发生在寄存器里是很快的,锁发生在内存里要看(如果发生在CPU的L1 cache上,就很快),如果发生在L2,L3或者内存里就慢很多;锁如果发生在IO上(比如读硬盘就非常慢)。所以缩小范围,要看缩小了什么,如果缩小了I/O,那就非常有必要了。 我用Sleep(I/O),所谓I/O就是触发中断的东西,来替代真实的I/O场景(比如读数据库,读redis等)。
寄存器速度约等于(l1),< l2, < l3 <<<<< 内存(这里大概有几十倍到百倍速度差距了) <<<<<< 固态硬盘(和内存间有百倍到千倍差距) <<<<<< 机械硬盘(和内存比大概有十万到百万倍差距)。。
阿里大神的思考,值得学习
原来的a是临界资源,所有的线程都要去争夺临界资源,就会发生排队。用了ThreadLocal之后每个线程都有一份线程本地资源,避免了多线程的排队竞争
匪曰思存 提问者
原先是只要有线程并发就排队,现在是不同线程间通过ThreadLocal进行资源隔离,就无须排队了,因为根本产生不了竞争,唯一的竞争就在那个共享的HashSet上,所以给add()操作同步一下就好了。缩小了原来的同步范围
举报
设计者视角源码级ThreadLocal分析教你建立线程安全感-你专属的技术优越感
1 回答为啥两个Initial Value run ...在一起,1,13在一起?不是分开调用的吗?啥原理呢
2 回答为什么MyThreadLocal里面HashMap里面再嵌套一个HashMap呢
4 回答20行为什么会有线程安全问题
4 回答请问为什么不能直接使用一个Thread和Value绑定的Map?
1 回答请问老师是否有其他更加系统全面的教程