java线程之InheritableThreadLocal
2014-02-11 21:38
351 查看
ThreadLocal和InheritableThreadLocal区别,可以用代码测试一下:
运行testThreadLocal,输出:
运行testInheritableThreadLocal,输出:
比较后,看到ThreadLocal里的值,子线程里不能获得;InheritableThreadLocal里的值,子线程可以获得。
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,输出:
Thread[main,5,main],a Thread[Thread-0,5,main],null Thread[Thread-0,5,main],b Thread[main,5,main],a
运行testInheritableThreadLocal,输出:
Thread[main,5,main],a Thread[Thread-0,5,main],a Thread[Thread-0,5,main],b Thread[main,5,main],a
比较后,看到ThreadLocal里的值,子线程里不能获得;InheritableThreadLocal里的值,子线程可以获得。
相关文章推荐
- 使用SpringMVC创建Restfult风格应用
- 经典排序算法-Java版
- 我的JAVA不定项
- java版经典算法排序汇总
- java学习笔记 标准for循环的执行过程
- java Method isSynthetic
- Java的基本数据类型详解
- java method isBridge
- Eclipse 中双击变量不高亮 解决
- java 中的设计模式
- Java学习这七年
- 出现 java.util.ConcurrentModificationException 时的解决办法
- struts2+spring+hibernate需要的jar包
- Struts2文件上传
- Spring Security 学习之X.509认证 推荐
- 项目启动部署
- java笔记10
- 新手配置SSH框架时出现ssh:对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决
- Java开发环境配置及常见问题
- JAVA数组的定义及使用方法