ThreadLocal和InheritableThreadLocal的区别
来源:互联网 发布:楠木鞋架淘宝 编辑:程序博客网 时间:2024/05/18 03:45
1、ThreadLocal
主要解决每个线程绑定自己的值,达到线程直接隔离。
1.1如果第一次访问没有设定初始值,返回为null
1.2线程直接的隔离性
//继承ThreadLocal类public class ThreadLocalExt extends ThreadLocal{}
//创建两个线程,分别设置自己的值public class ThreadA extends Thread{ @Override public void run() { for(int i = 0; i < 10; i ++){ Tools.local.set("A:"+ i); System.out.println("A:" + Tools.local.get()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}public class ThreadB extends Thread{ @Override public void run() { for(int i = 0; i < 10; i ++){ Tools.local.set("B:"+ i); System.out.println("B:" + Tools.local.get()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
public class Tools { public static ThreadLocalExt local = new ThreadLocalExt();}
程序入口类:public class Run { public static void main(String[] args) throws InterruptedException { ThreadA t1 = new ThreadA(); t1.start(); ThreadB t2 = new ThreadB(); t2.start(); }}
运行结果
A:A:0B:B:0B:B:1A:A:1B:B:2A:A:2A:A:3B:B:3A:A:4B:B:4A:A:5B:B:5A:A:6B:B:6A:A:7B:B:7A:A:8B:B:8B:B:9A:A:9
1.3通过重写initialValue方法可以设置初始化值
2、InheriThreadLocalExt
2.1值继承子线程可以从父线程中取得值。
public class InheriThreadLocalExt extends InheritableThreadLocal{ @Override protected Object initialValue() { return new Date().getTime(); }}
public class Tools { public static InheriThreadLocalExt local = new InheriThreadLocalExt();}
public class ThreadA extends Thread{ @Override public void run() { for(int i = 0; i < 10; i ++){ System.out.println("A:" + Tools.local.get()); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
public class Run { public static void main(String[] args) throws InterruptedException { for(int i = 0; i < 10; i ++){ System.out.println("Main方法中获取" + Tools.local.get()); } ThreadA t1 = new ThreadA(); t1.start(); }}
运行结果:
Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485Main方法中获取1494859232485A:1494859232492A:1494859232492A:1494859232492A:1494859232492A:1494859232492A:1494859232492A:1494859232492A:1494859232492A:1494859232492A:1494859232492
2.2注意:子线程取值的时候主线程将值进行更改,子线程读到的还是旧值。
阅读全文
0 0
- ThreadLocal和InheritableThreadLocal的区别
- threadlocal与inheritableThreadLocal的区别
- ThreadLocal和InheritableThreadLocal的使用
- ThreadLocal和InheritableThreadLocal的使用
- ThreadLocal和InheritableThreadLocal的使用
- InheritableThreadLocal用法与ThreadLocal的区别
- InheritableThreadLocal和ThreadLocal
- InheritableThreadLocal-- 特殊的ThreadLocal
- InheritableThreadLocal类和ThreadLocal类
- 深入学习ThreadLocal和InheritableThreadLocal
- Java多线程之ThreadLocal和InheritableThreadLocal的使用
- ThreadLocal与InheritableThreadLocal的使用
- ThreadLocal与InheritableThreadLocal的使用
- ThreadLocal & InheritableThreadLocal
- InheritableThreadLocal的认识--一种可继承的ThreadLocal
- ThreadLocal&InheritableThreadLocal解惑
- Android ThreadLocal及InheritableThreadLocal分析
- ThreadLocal与InheritableThreadLocal学习笔记
- EMAIL服务器的创建与配置
- ListView 或 Recyclerview 子项里面再添加子项
- MSYQL学习笔记(一) ----数据库基本操作
- html创建菜单列表
- cnn architecture
- ThreadLocal和InheritableThreadLocal的区别
- c语言中结构体对齐详解
- 史上最最简单的登录注册方法(Bomb后端云)
- 线程的让步(礼让)
- redis源码阅读笔记(一):sds
- opencv(19)---模板匹配及应用
- JVM 垃圾回收
- skewness以及数据去偏度
- c++第六次实验-项目一