[置顶] Java 多线程学习笔记(十) InheritableThreadLocal的使用
2016-07-04 11:44
615 查看
废话少说,上代码package extthread;
import tools.Tools;
public class ThreadA extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
System.out.println("在ThreadA线程中取值=" + Tools.tl.get());
Thread.sleep(100);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
子线程可以从父线程中去值。值继承也可以在修改。见如下代码
package ext;
import java.util.Date;
public class InheritableThreadLocalExt extends InheritableThreadLocal {
@Override
protected Object initialValue() {
return new Date().getTime();
}
@Override
protected Object childValue(Object parentValue) {
return parentValue + " 我在子线程加的~!";
}
}
运行结果:
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
import tools.Tools;
public class ThreadA extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
System.out.println("在ThreadA线程中取值=" + Tools.tl.get());
Thread.sleep(100);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package ext; import java.util.Date; public class InheritableThreadLocalExt extends InheritableThreadLocal { @Override protected Object initialValue() { return new Date().getTime(); } }
package test; import tools.Tools; import extthread.ThreadA; public class Run { public static void main(String[] args) { try { for (int i = 0; i < 10; i++) { System.out.println(" 在Main线程中取值=" + Tools.tl.get()); Thread.sleep(100); } Thread.sleep(5000); ThreadA a = new ThreadA(); a.start(); } catch (InterruptedException e) { e.printStackTrace(); } } }
package tools; import ext.InheritableThreadLocalExt; public class Tools { public static InheritableThreadLocalExt tl = new InheritableThreadLocalExt(); }
子线程可以从父线程中去值。值继承也可以在修改。见如下代码
package ext;
import java.util.Date;
public class InheritableThreadLocalExt extends InheritableThreadLocal {
@Override
protected Object initialValue() {
return new Date().getTime();
}
@Override
protected Object childValue(Object parentValue) {
return parentValue + " 我在子线程加的~!";
}
}
运行结果:
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
相关文章推荐
- jar 问题 : java.io.IOException: invalid header field
- Ubuntu16.04下面配置java环境变量
- Spring 事物的传播特性
- Ubuntu 16 eclipse 4打开后没有菜单栏的解决方法
- [改善Java代码]枚举项的数量限制在64个以内
- 消息总线——EventBus
- Java Web实战05--Spring之bean引用
- Spring MVC学习总结(6)——一些Spring MVC的使用技巧
- Spring MVC学习总结(6)——一些Spring MVC的使用技巧
- Spring MVC学习总结(6)——一些Spring MVC的使用技巧
- spring @Scheduled注解执行定时任务
- spring boot 使用velocity模板
- SpringMVC+Mybatis框架整合源码
- Java中String的用法
- 《Java编程思想》读书笔记
- SSH框架---Struts2+hibernate实现用户登录和增删改查案例
- Spring4 多种定时器详解
- 基于Spring MVC做单元测试 —— 使用JMockit
- java selflearning
- java二分查找算法