ThreadLocal和InheritableThreadLocal区别,可以用代码测试一下:

[java] view plain copy

  1. package com.lang;
  2. import junit.framework.TestCase;
  3. import static java.lang.System.out;
  4. public class TestInheritableThreadLocal extends TestCase {
  5. public void testThreadLocal() {
  6. final ThreadLocal<String> local = new ThreadLocal<String>();
  7. work(local);
  8. }
  9. public void testInheritableThreadLocal() {
  10. final ThreadLocal<String> local = new InheritableThreadLocal<String>();
  11. work(local);
  12. }
  13. private void work(final ThreadLocal<String> local) {
  14. local.set("a");
  15. out.println(Thread.currentThread() + "," + local.get());
  16. Thread t = new Thread(new Runnable() {
  17. @Override
  18. public void run() {
  19. out.println(Thread.currentThread() + "," + local.get());
  20. local.set("b");
  21. out.println(Thread.currentThread() + "," + local.get());
  22. }
  23. });
  24. t.start();
  25. try {
  26. t.join();
  27. catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. out.println(Thread.currentThread() + "," + local.get());
  31. }
  32. }

运行testThreadLocal,输出:

[plain] view plain copy

  1. Thread[main,5,main],a
  2. Thread[Thread-0,5,main],null
  3. Thread[Thread-0,5,main],b
  4. Thread[main,5,main],a

运行testInheritableThreadLocal,输出:

[plain] view plain copy

  1. Thread[main,5,main],a
  2. Thread[Thread-0,5,main],a
  3. Thread[Thread-0,5,main],b
  4. Thread[main,5,main],a

比较后,看到ThreadLocal里的值,子线程里不能获得;InheritableThreadLocal里的值,子线程可以获得。

java线程之InheritableThreadLocal相关推荐

  1. JAVA线程之Thread类详解

    Thread类用于操作线程,是所以涉及到线程操作(如并发)的基础.本文将通过源码对Thread类的功能作用进行分析. 一.属性 /* Make sure registerNatives is the ...

  2. Java线程之Synchronized用法

    synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对 ...

  3. (JAVA)线程之lock和死锁(例)

    package thread; import java.util.concurrent.locks.*;/*** @author Alina* @date 2021年12月20日 11:07 下午* ...

  4. C++/Java线程之分

    JAVA线程状态图 1.C++/windows中主线程结束,其他线程必然死亡(即使调用pthread_detach解除父子关系,主线程消亡时也会导致子线程被迫关闭). ----1.1 一个进程中可以有 ...

  5. Java线程之CompletionService批处理任务

    如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...

  6. Java线程之CompletionService

    当使用ExecutorService启动了多个Callable后,每个Callable会产生一个Future,我们需要将多个Future存入一个线性表,用于之后处理数据.当然,还有更复杂的情况,有5个 ...

  7. Java线程之setDaemon(true)方法的作用

    一.线程 JAVA线程分为即实线程与守护线程,守护线程是优先级低,存活与否不影响JVM的退出的线程,实现守护线程的方法是在线程start()之前setDaemon(true),否则会抛出一个Illeg ...

  8. java线程之List集合并发安全问题及解决方案

    一.问题代码 任务:执行10轮次,使用多线程,给list集合添加元素,查看每次执行的结果. public static void main(String[] args) throws Interrup ...

  9. Java线程之join

    简述 Thread类的join方法用来使main线程进入阻塞状态,进而等待调用join方法的线程执行,join有三个重载方法: public final void join() 使主线程进入阻塞状态, ...

最新文章

  1. 使用Filezilla Server配置FTP服务器
  2. VTK:几何对象之RegularPolygonSource
  3. Java学习总结 16个亮点
  4. .NET Core CLI 的性能诊断工具介绍
  5. OutOfMemoryError:无法创建新的本机线程–神秘化的问题
  6. python中如何调用或修改元组中的元素_python 元组的使用方法
  7. 【Git、GitHub、GitLab】十 将git仓库备份到本地
  8. Spring Boot开发Web应用
  9. 产品经理如何洞察人性?
  10. 小程序模板-评分星星
  11. 打砖块游戏代码 c语言,打砖块游戏的源代码(请多指教)
  12. caffe的python接口学习(2):生成solver文件
  13. 最全的smarty‘总结~耿兴隆老师著作,学子zyf献上
  14. kubectl自动补全
  15. 【应用多元统计分析】-王学民Python主成分分析例题,特征值处理和可视化(2)
  16. mac上Python版本不同时给指定的版本安装库
  17. IT零起点转FICO学习路线(转)
  18. mysql查询薪酬最高_SQL查询找到第N个最高薪水
  19. 如何设计出色的网站后台原型?
  20. 图像信号处理器及其架构演进

热门文章

  1. JS实现md5.js、md4.js、sha1.js 加密算法使用
  2. 软件测试中英文词汇汇总
  3. 《价值50亿的10句话》读后感(学生作业分享)
  4. Qt串口通信类Posix_QextserialPort中flush()函数修正
  5. 腾讯:将收购Riot Games多数股权
  6. SICStus Prolog 3.10.0正式版下载
  7. 【机器学习】最近邻算法KNN原理、流程框图、代码实现及优缺点
  8. 基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结
  9. Memcache工作原理总结
  10. DCOM 示例:演示如何远程调用 COM 对象