ThreadLocal变量
来源:互联网 发布:查看ip的端口是否打开 编辑:程序博客网 时间:2024/05/21 07:12
TheadLocal线程局部变量:为每一个使用变量的线程都提供一个变量值的副本,每个线程都可以独立地改变自己的副本,而不会和其他线程冲突。
ThreadLocal类有一个protected方法initialValue()和三个public方法get(),set(T),remove(),其他的私有方法暂不讨论,主要看一下3个公有方法的实现原理:
set(T)
public void set(T value) { Thread t = Thread.currentThread(); # 每个线程有自己维护的一个Map ThreadLocalMap map = getMap(t); # 如果存在就把当前值放入线程的Map中,key为当前ThreadLocal类的实例 if (map != null) map.set(this, value); else # 如果不存在就创建这个Map,然后将ThreadLocal实例作为key createMap(t, value); }
T get()
public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); # 根据当前的ThreadLocal实例获得存入的value值 if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) { @SuppressWarnings("unchecked") T result = (T)e.value; return result; } } # 如果不存在就返回一个初始值 return setInitialValue(); }
remove()
public void remove() { # 获得当前线程的Map ThreadLocalMap m = getMap(Thread.currentThread()); # 根据当前ThreadLocal实例移除Map中的值 if (m != null) m.remove(this); }
ThreadLocal(以空间换时间)和线程同步机制(以时间换空间)都是为了解决多线程中相同变量的访问冲突问题。
阅读全文
0 0
- ThreadLocal变量
- ThreadLocal变量
- ThreadLocal变量
- ThreadLocal变量
- ThreadLocal 与 static 变量
- ThreadLocal---线程本地变量
- 如何使用ThreadLocal变量
- 线程局部变量ThreadLocal
- ThreadLocal 线程局部变量
- ThreadLocal 线程变量
- ThreadLocal---线程本地变量
- 线程局部变量ThreadLocal
- ThreadLocal线程局部变量
- 线程局部变量ThreadLocal
- 线程局部变量ThreadLocal
- 线程变量 ThreadLocal
- lk中的threadlocal 变量
- ThreadLocal,线程本地变量
- ArrayList源码分析
- Python的ORM框架SQLAlchemy使用入门(二)【连接MySql数据库】
- Sublime Text 3 安装 Package Control
- An Introduction to Interactive Programming in Python week 9
- Android四大组件Servier(下)
- ThreadLocal变量
- Unity中创建攻击Slot系统
- AR表
- 霸王链小程序开发源码分析
- springMVC注解@RequestParam解析
- Java 实现 UDP
- OpenAI gym入门
- 查看mysql表结构和表创建语句的方法
- HTML总结