java线程之InheritableThreadLocal
ThreadLocal和InheritableThreadLocal区别,可以用代码测试一下:
[java] view plain copy
- package com.lang;
- import junit.framework.TestCase;
- import static java.lang.System.out;
- public class TestInheritableThreadLocal extends TestCase {
- public void testThreadLocal() {
- final ThreadLocal<String> local = new ThreadLocal<String>();
- work(local);
- }
- public void testInheritableThreadLocal() {
- final ThreadLocal<String> local = new InheritableThreadLocal<String>();
- work(local);
- }
- private void work(final ThreadLocal<String> local) {
- local.set("a");
- out.println(Thread.currentThread() + "," + local.get());
- Thread t = new Thread(new Runnable() {
- @Override
- public void run() {
- out.println(Thread.currentThread() + "," + local.get());
- local.set("b");
- out.println(Thread.currentThread() + "," + local.get());
- }
- });
- t.start();
- try {
- t.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- out.println(Thread.currentThread() + "," + local.get());
- }
- }
运行testThreadLocal,输出:
[plain] view plain copy
- Thread[main,5,main],a
- Thread[Thread-0,5,main],null
- Thread[Thread-0,5,main],b
- Thread[main,5,main],a
运行testInheritableThreadLocal,输出:
[plain] view plain copy
- Thread[main,5,main],a
- Thread[Thread-0,5,main],a
- Thread[Thread-0,5,main],b
- Thread[main,5,main],a
比较后,看到ThreadLocal里的值,子线程里不能获得;InheritableThreadLocal里的值,子线程可以获得。
java线程之InheritableThreadLocal相关推荐
- JAVA线程之Thread类详解
Thread类用于操作线程,是所以涉及到线程操作(如并发)的基础.本文将通过源码对Thread类的功能作用进行分析. 一.属性 /* Make sure registerNatives is the ...
- Java线程之Synchronized用法
synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对 ...
- (JAVA)线程之lock和死锁(例)
package thread; import java.util.concurrent.locks.*;/*** @author Alina* @date 2021年12月20日 11:07 下午* ...
- C++/Java线程之分
JAVA线程状态图 1.C++/windows中主线程结束,其他线程必然死亡(即使调用pthread_detach解除父子关系,主线程消亡时也会导致子线程被迫关闭). ----1.1 一个进程中可以有 ...
- Java线程之CompletionService批处理任务
如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果,怎么办呢? 为此你可以保存与每个任务相关联的Future,然后不断地调用 timeout为零的get,来检验Future是否 ...
- Java线程之CompletionService
当使用ExecutorService启动了多个Callable后,每个Callable会产生一个Future,我们需要将多个Future存入一个线性表,用于之后处理数据.当然,还有更复杂的情况,有5个 ...
- Java线程之setDaemon(true)方法的作用
一.线程 JAVA线程分为即实线程与守护线程,守护线程是优先级低,存活与否不影响JVM的退出的线程,实现守护线程的方法是在线程start()之前setDaemon(true),否则会抛出一个Illeg ...
- java线程之List集合并发安全问题及解决方案
一.问题代码 任务:执行10轮次,使用多线程,给list集合添加元素,查看每次执行的结果. public static void main(String[] args) throws Interrup ...
- Java线程之join
简述 Thread类的join方法用来使main线程进入阻塞状态,进而等待调用join方法的线程执行,join有三个重载方法: public final void join() 使主线程进入阻塞状态, ...
最新文章
- 使用Filezilla Server配置FTP服务器
- VTK:几何对象之RegularPolygonSource
- Java学习总结 16个亮点
- .NET Core CLI 的性能诊断工具介绍
- OutOfMemoryError:无法创建新的本机线程–神秘化的问题
- python中如何调用或修改元组中的元素_python 元组的使用方法
- 【Git、GitHub、GitLab】十 将git仓库备份到本地
- Spring Boot开发Web应用
- 产品经理如何洞察人性?
- 小程序模板-评分星星
- 打砖块游戏代码 c语言,打砖块游戏的源代码(请多指教)
- caffe的python接口学习(2):生成solver文件
- 最全的smarty‘总结~耿兴隆老师著作,学子zyf献上
- kubectl自动补全
- 【应用多元统计分析】-王学民Python主成分分析例题,特征值处理和可视化(2)
- mac上Python版本不同时给指定的版本安装库
- IT零起点转FICO学习路线(转)
- mysql查询薪酬最高_SQL查询找到第N个最高薪水
- 如何设计出色的网站后台原型?
- 图像信号处理器及其架构演进
热门文章
- JS实现md5.js、md4.js、sha1.js 加密算法使用
- 软件测试中英文词汇汇总
- 《价值50亿的10句话》读后感(学生作业分享)
- Qt串口通信类Posix_QextserialPort中flush()函数修正
- 腾讯:将收购Riot Games多数股权
- SICStus Prolog 3.10.0正式版下载
- 【机器学习】最近邻算法KNN原理、流程框图、代码实现及优缺点
- 基于ACE Proactor框架下高并发、大容量吞吐程序设计既最近的一个产品开发总结
- Memcache工作原理总结
- DCOM 示例:演示如何远程调用 COM 对象