ThreadLocal 的线程安全性稍差的堂兄弟,InheritableThreadLocal
ThreadLocal 类有一个亲戚,InheritableThreadLocal,它以相似的方式工作,但适用于种类完全不同的应用程序。创建一个线程时如果保存了所有 InheritableThreadLocal 对象的值,那么这些值也将自动传递给子线程。如果一个子线程调用 InheritableThreadLocal 的 get() ,那么它将与它的父线程看到同一个对象。为保护线程安全性,您应该只对不可变对象(一旦创建,其状态就永远不会被改变的对象)使用 InheritableThreadLocal ,因为对象被多个线程共享。 InheritableThreadLocal 很合适用于把数据从父线程传到子线程,例如用户标识(user id)或事务标识(transaction id),但不能是有状态对象,例如 JDBC Connection 。
例1:InheritableThreadLocal
该类扩展了 ThreadLocal,为子线程提供从父线程那里继承的值:在创建子线程时,子线程会接收所有可继承的线程局部变量的初始值,以获得父线程所具有的值。通常,子线程的值与父线程的值是一致的;但是,通过重写这个类中的 childValue 方法,子线程的值可以作为父线程值的一个任意函数。
当必须将变量(如用户 ID 和 事务 ID)中维护的每线程属性(per-thread-attribute)自动传送给创建的所有子线程时,应尽可能地采用可继承的线程局部变量,而不是采用普通的线程局部变量。
private static final InheritableThreadLocal<Object> OBJECT= new InheritableThreadLocal<Object>();
/**
* 保存信息在当前线程中
*
* @param object 要保存的对象
*/
public static void holdObject(Object object)
{
OBJECT.set(object);
}
/**
*当前线程及其子线程都可以取到此对象
*/
public static Object getObject()
{
return Object.get();
}
例2:ThreadLocal
请参照jdk6API中文参考ThreadLocal
分享到:
相关推荐
ThreadLocal、InheritableThreadLocal详解 多线程访问同一个共享变量时,容易出现并发冲突,为了保证线程的安全,一般使用者在访问共享变量时,需要进行适量的同步。而ThreadLocal提供了线程的私有变量,每个线程都...
Android 详解ThreadLocal及InheritableThreadLocal 概要: 因为在android中经常用到handler来处理异步任务,通常用于接收消息,来操作UIThread,其中提到涉及到的looper对象就是保存在Threadlocal中的,因此研究下...
3 TransmittableThreadLocal 的实现原理:TransmittableThreadLocal 是基于ThreadLocal 和InheritableThreadLocal 的结合,能够实现跨线程池之间的数据传递。 4 TransmittableThreadLocal 的应用场景:...
ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。
Synchronized与ThreadLocal
ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。
ThreadLocal
理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal
Java中ThreadLocal的设计与使用.doc
学习ThreadLocal,了解其中的原理,以及学习其中的优点!避免坑点!!
正确理解ThreadLocal.pdf
java 简单的ThreadLocal示例
ThreadLocal 中内存泄漏和数据丢失问题的问题浅析及解决方案 ThreadLocal 是 Java 中的一种线程本地存储机制,它可以解决线程之间的数据传递问题。然而,在使用 ThreadLocal 时,可能会出现内存泄漏和数据丢失问题...
ThreadLocal的几种误区ThreadLocal的几种误区ThreadLocal的几种误区
主要介绍ThreadLocal的原理,实例分析以及注意事项
DbUTils中用ThreadLocal类
详解java底层实现原理,ThreadLocal底层实现的数据结构,为什么不会导致内存泄露