JavaAPI之ThreadLocal
2016-06-06 23:06
447 查看
结构
java.lang类 ThreadLocal<T>
java.lang.Object java.lang.ThreadLocal<T>
直接已知子类: InheritableThreadLocal
描述
public class ThreadLocal<T>extends Object
该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其
get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
例如,以下类生成对每个线程唯一的局部标识符。线程 ID 是在第一次调用 UniqueThreadIdGenerator.getCurrentThreadId() 时分配的,在后续调用中不会更改。
import java.util.concurrent.atomic.AtomicInteger; public class UniqueThreadIdGenerator { private static final AtomicInteger uniqueId = new AtomicInteger(0); private static final ThreadLocal < Integer > uniqueNum = new ThreadLocal < Integer > () { @Override protected Integer initialValue() { return uniqueId.getAndIncrement(); } }; public static int getCurrentThreadId() { return uniqueId.get(); } } // UniqueThreadIdGenerator
每个线程都保持对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)。
从以下版本开始: 1.2
构造方法
public ThreadLocal() 创建一个线程本地变量。
方法详细
1、protected TinitialValue()
返回此线程局部变量的当前线程的“初始值”。线程第一次使用
get()方法访问变量时将调用此方法,但如果线程之前调用了
set(T)方法,则不会对该线程再调用 initialValue 方法。通常,此方法对每个线程最多调用一次,但如果在调用
get()后又调用了
remove(),则可能再次调用此方法。
该实现返回 null;如果程序员希望线程局部变量具有 null 以外的值,则必须为 ThreadLocal 创建子类,并重写此方法。通常将使用匿名内部类完成此操作。
返回:返回此线程局部变量的初始值
2、public T
get()
返回此线程局部变量的当前线程副本中的值。如果变量没有用于当前线程的值,则先将其初始化为调用
initialValue()方法返回的值。
返回:此线程局部变量的当前线程的值
3、public void set(T value)
将此线程局部变量的当前线程副本中的值设置为指定值。大部分子类不需要重写此方法,它们只依靠
initialValue()方法来设置线程局部变量的值。
参数:
value- 存储在此线程局部变量的当前线程副本中的值。
4、public void remove()
移除此线程局部变量当前线程的值。如果此线程局部变量随后被当前线程读取,且这期间当前线程没有设置其值,则将调用其
initialValue()方法重新初始化其值。这将导致在当前线程多次调用
initialValue 方法。
从以下版本开始:1.5
相关文章推荐
- struts2 fileUpload glassfish 上载文件限制修改
- myeclipse 常用优化设置
- Exception sending context initialized event to listener instance of class org.springframework.web.co
- 《java并发编程实战》笔记(1)
- Spring与Hibernate整合
- java匿名内部类
- java多线程常见问题和解析
- JAVA中List的三个子类。
- JAVA Hibernate工作原理及为什么要用
- java-Leetcode- Binary Tree Traversal
- 《java入门第一季》之集合框架TreeSet存储元素自然排序以及图解
- 《java入门第一季》之集合框架TreeSet存储元素自然排序以及图解
- java集合
- Java IO包装流如何关闭?
- Spring事务控制
- 《Java异常处理》学习笔记
- java函数重载
- Eclipse-快捷键大全(转载)
- 设计模式——抽象工厂模式
- Hibernate中Java对象的三种状态以及之间的转换 ----Hibernate_4