MtContextThreadLocal(一)
来源:互联网 发布:家庭装修网络布线图 编辑:程序博客网 时间:2024/05/16 06:25
AtomicReference干嘛的?
假设releaseMtContextAfterRun为true,那么上下文仅能被执行线程使用一次。
所以
@Overridepublic void run() { Map<MtContextThreadLocal<?>, Object> copied = copiedRef.get(); if (copied == null || releaseMtContextAfterRun && !copiedRef.compareAndSet(copied, null)) { throw new IllegalStateException("MtContext is released!"); } //recover context may be more easy to understand. Map<MtContextThreadLocal<?>, Object> backup = MtContextThreadLocal.backupAndSet(copied); try { runnable.run(); } finally { MtContextThreadLocal.restore(backup); }}
只有设置了releaseMtContextAfterRun为true,那么多个线程读取时才会使用CAS获取竞态资源。
if(copied==null||(releaseMtContextAfterRun &&copiedRef.compareAndSwap(copyied,null))){
}
In fact.ThreadLocal的内部类ThreadLocalMap是个WeakHashMap
0 0
- MtContextThreadLocal(一)
- (一)
- (一)
- (一)
- (一)
- (一)
- hibernate一二级缓存(一)
- 每日一题(一)
- 一、对象导论(一)
- 万能的一玄:一玄创业故事(一)
- python(一)端口扫描器(一)
- C每日一读(一)
- 每日一植物(一) -- 虎皮兰
- 第六周 项目一(一)
- opencv打开一幅图像(一)
- 一.Java编程基础(一)
- 蚂蚁问题 每日一练(一)
- 一.贪心算法 喷水装置(一)
- Java学习03--变量的强制转换、字符运算
- cocos2d-x 3.6 渲染绘制流程
- sphinx 中的注解,及java Annotation 总结
- HDOJ 2021 发工资咯:)(水题)
- C#学习笔记__容器控件的使用
- MtContextThreadLocal(一)
- WebStorm/IntellJ编译器使用GIT先fetch后merge报错detached head解决办法
- 数组赋值于双指针
- Best Time to Buy and Sell Stock
- Kmeans聚类与dbscan聚类对比
- 113.根据要求合并两个整数
- Spring-mvc传参数
- 一款实现浏览实事的资讯平台app
- nc默认枚举,获取前台传过来的数据块