`

InheritableThreadLocal 与 ThreadLocal

    博客分类:
  • java
 
阅读更多
package com.verser.weixin.test;

public class Test {
	static InheritableThreadLocal<Object> ITL = new InheritableThreadLocal<Object>(){
		protected Object initialValue() {
			return new StringBuffer("hello ");
		};
	};
	
	static ThreadLocal<Object> TL = new ThreadLocal<Object>(){
		protected Object initialValue() {
			return new StringBuffer("HELLO ");
		};		
	};
	
	public static void main(String[] args) throws Exception {
		
		System.out.println("Thread-t " + " , " + ITL.get() + " , " + TL.get());		
		Thread t_1 = new Thread(new Runnable() {
			@Override
			public void run() {		
				System.out.println("Thread-t_1 " + " , " + ITL.get() + " , " + TL.get());
				
				((StringBuffer)ITL.get()).append("wonderful ");
				((StringBuffer)TL.get()).append("WONDERFUL ");
				
				Thread t_1_1 = new Thread(new Runnable() {
					@Override
					public void run() {
						System.out.println("Thread-t_1_1 "  + " , " + ITL.get() + " , " + TL.get());
						((StringBuffer)ITL.get()).append("world");
						((StringBuffer)TL.get()).append("WORLD");
						System.out.println("Thread-t_1_1 " + " , " + ITL.get() + " , " + TL.get());
					}
				});
				t_1_1.start();
				try {
					t_1_1.join();
					System.out.println("Thread-t_1 " + " , " + ITL.get() + " , " + TL.get());
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		t_1.start();
		t_1.join();
		System.out.println("Thread-t " + " , " + ITL.get() + " , " + TL.get());
		
	}
}

 

Thread-t  , hello  , HELLO 
Thread-t_1  , hello  , HELLO 
Thread-t_1_1  , hello wonderful  , HELLO 
Thread-t_1_1  , hello wonderful world , HELLO WORLD
Thread-t_1  , hello wonderful world , HELLO WONDERFUL 
Thread-t  , hello wonderful world , HELLO 

 

分享到:
评论

相关推荐

    InheritableThreadLocal & ThreadLocal

    三、ThreadLocal与InheritableThreadLocal的区别 1. 变量继承性:ThreadLocal不支持变量继承,子线程无法访问父线程的ThreadLocal变量;而InheritableThreadLocal支持,子线程会自动复制父线程的副本。 2. 生命...

    Android 详解ThreadLocal及InheritableThreadLocal

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

    ThreadLocal、InheritableThreadLocal详解

    InheritableThreadLocal与ThreadLocal非常相似,但它增加了线程继承的特性。如果一个线程创建了一个子线程,那么子线程会继承父线程中的InheritableThreadLocal变量。这意味着子线程可以访问到父线程设置的值,这在...

    java多线程编程之InheritableThreadLocal

    Java 多线程编程之 InheritableThreadLocal ...* InheritableThreadLocal 与 ThreadLocal 的区别 * 使用 InheritableThreadLocal 需要注意的线程安全问题 * InheritableThreadLocal 在多线程编程中的应用场景和示例代码

    ThreadLocal垮线程池传递数据解决方案.docx

    3 TransmittableThreadLocal 的实现原理:TransmittableThreadLocal 是基于ThreadLocal 和InheritableThreadLocal 的结合,能够实现跨线程池之间的数据传递。 4 TransmittableThreadLocal 的应用场景:...

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

    1. **会话管理**:在分布式应用中,可以使用`InheritableThreadLocal`来存储用户会话信息,确保请求在处理过程中始终与正确的会话关联。 2. **权限控制**:在线程执行的任务中,可以存储当前用户的权限信息,使得子...

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

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

    transfertable-thread-local::pushpin:TransmittableThreadLocal(TTL),缺少框架中间件的Java:trade_mark:std lib(简单和0依赖),提供了增强的InheritableThreadLocal,即使使用线程池组件也可以在线程之间传输值

    :backhand_index_pointing_right:在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库...

    Java 20 新功能介绍.pdf

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

    java-lang包详解

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

    高级Java经典面试题2019

    #### 多线程并发与并行 - **并发**:指一个系统内多个进程或线程交替执行的过程,每个任务都可能被执行一小段时间,然后让位给其他任务,使得多个任务看起来同时运行。 - **并行**:指多个任务在同一时刻执行,通常...

    java.lang包介绍

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

    java_lang包详解.pdf

    `Thread`, `Compiler`, `Process`, `ThreadGroup`, `Double`, `Runtime`, `ThreadLocal`, `Float`, `RuntimePermission`, `Throwable`, `InheritableThreadLocal`, `SecurityManager`, 和 `Void`。这些类不仅提供了...

    java-java-lang包.pdf

    例如在Java 2中,就增加了一些新的类如InheritableThreadLocal和Character.Subset等。这些改进让java.lang包更加丰富和强大,为Java编程提供了更广泛的支撑。在开发过程中,了解和熟悉java.lang包提供的类和接口能够...

    Java进阶知识点汇总.pdf

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

Global site tag (gtag.js) - Google Analytics