Java ThreadLocal
ThreadLocal是什么?
定义: 提供线程局部变量;一个线程局部边用在多个线程中分别有独立的值(副本)
特点:简单(开箱即用)、快速(无额外开销)、安全(线程安全)
场景:多线程场景(资源持有、线程一致性、并发计算、线程安全等场景)
实现原理:Java中用哈希表实现
应用范围:几乎所有提供多线程特征的语言
ThreadLocal基本API
- 构造函数: ThreadLocal<T>()
- 初始化:initialValue()
- 访问器:get/set
- 回收:remove
THreadLocal的4种核心场景
场景1: 线程资源持有
持有线程资源供线程的各个部分使用,全局获取,减少编程难度
场景2:线程资源一致性
帮助需要保持线程一直的资源(如数据库事务)维护一致性,降低编程难度
场景3:线程安全
帮助只考虑了单线程的程序库,无缝想多线程场景迁移
场景4:分布式计算
帮助分布式计算场景的各个线程累计局部计算的结果
并发、竞争条件和临界区
并发:多个程序同时执行
竞争条件:多个进程(线程)同时访问同意内存资源,最终的执行结果依赖于多个进程执行精准时序
临界区:访问共享北村的程序片段