`
huangyh
  • 浏览: 62376 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

InheritableThreadLocal 线程变量

阅读更多
ThreadLocal有个缺陷,在子线程里无法访问父线程的变量,
InheritableThreadLocal 解决了这个问题,自动会把父线程的变量传递个子线程,
子线程只能用,修改了不会影响父线程的 东西


public class Test {
	
 private final static InheritableThreadLocal<String> holder = new InheritableThreadLocal<String>();
 public static void main(String[] args){
	 holder.set("aaa");
	 System.out.println("begin=" + holder.get());
	 Thread a = new Thread(){
		public void run() {
			 System.out.println("thread-begin=" + holder.get());
			 holder.set("vvvvvvvvvvvvv");
			 System.out.println("thread-end=" + holder.get());
		}
	 };

	 a.start();
	 try {
		Thread.sleep(2000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	 System.out.println("end=" + holder.get());

分享到:
评论
3 楼 tangjwtj 2010-11-22  
我也复制跑了一下,没有影响到父线程啊
2 楼 victorlin23 2010-09-09  
“这个说法可能不太好。子线程初始化时得到的是父线程数据的引用,可以对父线程的数据进行修改。这个也是使用InheritableThreadLocal需要注意的地方。”
对数据的引用,子线程的修改就会被父线程捕捉到。博主,没测试?我测过了,子线程修改InheritableThreadLocal里面的值,父线程是会被影响的。
1 楼 demh 2010-04-29  
使用InheritableThreadLocal后,子线程只能用,修改了不会影响父线程的 东西 。

这个说法可能不太好。子线程初始化时得到的是父线程数据的引用,可以对父线程的数据进行修改。这个也是使用InheritableThreadLocal需要注意的地方。

相关推荐

    InheritableThreadLocal & ThreadLocal

    在Java编程中,线程局部变量(ThreadLocal)和可继承线程局部变量(InheritableThreadLocal)是两种非常重要的工具,它们允许我们在多线程环境中创建独立于线程的局部变量,确保每个线程拥有自己的变量副本,避免了...

    Java_为frameworkmiddleware提供了一个增强的InheritableThreadLocal,即使使.zip

    Java中的`InheritableThreadLocal`是线程局部变量的一个扩展,它允许子线程继承父线程中`InheritableThreadLocal`实例的值。这个特性在开发框架和中间件时尤其有用,因为它可以方便地传递上下文信息,如会话状态、...

    Android 详解ThreadLocal及InheritableThreadLocal

    **InheritableThreadLocal** 类与ThreadLocal类似,但其特性是当新线程被创建时(比如通过`Thread.start()`),新线程会继承父线程中InheritableThreadLocal变量的副本。这意味着在子线程中可以访问到父线程中设置的...

    ThreadLocal、InheritableThreadLocal详解

    ThreadLocal和InheritableThreadLocal是Java中处理线程局部变量的两个类,它们主要用于解决多线程环境下的数据隔离问题。线程安全是并发编程中的核心问题之一,当多个线程访问同一份共享资源时,可能会导致数据不...

    Java 20 新功能介绍.pdf

    Scoped Value 解决了在线程之间共享变量的问题,ThreadLocal 和 InheritableThreadLocal 都有其缺陷。ThreadLocal 需要手动清理,且变量不能被子线程继承;InheritableThreadLocal 可以共享信息,但是数据会拷贝多份...

    JAVA面试题.docx

    **其他并发工具类与锁原理**:这部分内容涉及ThreadLocal的工作原理、InheritableThreadLocal如何传递线程局部变量、CyclicBarrier和CountDownLatch的区别与用法、Semaphore信号量机制、CopyOnWriteArrayList如何...

    高级Java经典面试题2019

    `InheritableThreadLocal`允许子线程继承父线程中的变量值。它的实现基于`Thread`类中的`copyStateFrom`方法,将父线程的`ThreadLocal`值复制到子线程。 #### CyclicBarrier与CountDownLatch的不同 - **...

    Java进阶知识点汇总.pdf

    - **InheritableThreadLocal**:继承自`ThreadLocal`,用于创建可继承的线程局部变量。 ##### java.lang.ref包下的类 - **Reference**:基类,所有引用类型都继承自该类。 - **PhantomReference**(虚引用):仅...

    java.lang包介绍

    在Java 2(J2SE)中,`java.lang`包添加了一些新的类和方法,如`InheritableThreadLocal`,`ThreadLocal`的扩展,使得子线程可以继承父线程的变量,以及`SecurityManager`,用于实现安全管理策略。 过时方法在Java ...

    java-lang包详解

    - **InheritableThreadLocal**: 与ThreadLocal类似,但子线程可以继承父线程的值。 - **Compiler**: 提供编译运行时的类。 - **Process**: 表示操作系统进程,提供了与进程相关的操作。 - **RuntimePermission**...

    java_lang包详解.pdf

    java.lang包还包含了一些与安全、线程和内存管理相关的类,如SecurityManager用于安全管理,Thread和ThreadGroup是线程相关的类,ClassLoader负责加载类,ThreadLocal为每个线程提供独立的变量副本,而Runtime类提供...

    java-java-lang包.pdf

    - ThreadLocal:用于提供线程内部的局部变量。 6. 实用工具类: - String:表示字符串,提供了丰富的字符串操作方法。 - StringBuffer:表示字符序列,与String不同,StringBuffer是可变的,适合频繁修改的场景...

    java1.8源码-jdk1.8.0_111:JDK1.8源码注释

    InheritableThreadLocal跟ThreadLocal差不多,关键点在Thread#init方法中会对Thread中的实例变量inheritableThreadLocals进行赋值操作,将父线程的本地变量复制到子线程中 首先通过ServiceLoader.load方法生成一个...

Global site tag (gtag.js) - Google Analytics