类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有数据。

方法get()和null

public class Run {private static ThreadLocal tl = new ThreadLocal();public static void main(String[] args) {if(tl.get() == null){System.out.println("从未放过值");tl.set("我的值");}System.out.println(tl.get());System.out.println(tl.get());}
}

解决get()返回null问题

public class ThreadLocalExt extends ThreadLocal{@Overrideprotected Object initialValue() {return "我是默认值,第一次get不再为null";}
}public class Run {private static ThreadLocalExt tl = new ThreadLocalExt();public static void main(String[] args) {if(tl.get() == null){System.out.println("从未放过值");tl.set("我的值");}System.out.println(tl.get());System.out.println(tl.get());}
}

线程变量的隔离性

public class Tools {public static ThreadLocal tl = new ThreadLocal();
}public class ThreadA extends Thread{@Overridepublic void run() {try {for (int i = 0; i < 100; i++) {Tools.tl.set("ThreadA"+(i+1));System.out.println("ThreadA get value="+Tools.tl.get());Thread.sleep(200);}} catch (InterruptedException e) {e.printStackTrace();}}
}public class ThreadB extends Thread{@Overridepublic void run() {try {for (int i = 0; i < 100; i++) {Tools.tl.set("ThreadB"+(i+1));System.out.println("ThreadB get value="+Tools.tl.get());Thread.sleep(200);}} catch (InterruptedException e) {e.printStackTrace();}}
}public class Run {public static void main(String[] args) {try {ThreadA a = new ThreadA();ThreadB b = new ThreadB();a.start();b.start();for (int i = 0; i < 100; i++) {Tools.tl.set("main"+(i+1));System.out.println("main get value="+Tools.tl.get());Thread.sleep(200);}} catch (InterruptedException e) {e.printStackTrace();}}
}

线程:类ThreadLocal的使用相关推荐

  1. 线程本地ThreadLocal的介绍与使用!

    ThreadLocal简介 我们通过上两篇的学习,我们已经知道了变量值的共享可以使用public static变量的形式,所有的线程都使用同一个被public static修饰的变量. 那么如果我们想 ...

  2. Java线程局部变量ThreadLocal

    ThreadLocal基础 ThreadLocal类可以让每个线程绑定自己的值,它就像一个全局存放数据的盒子,盒子中可以存放每个线程的私有数据. ThreadLocal类只有一个无参的构造函数,因此实 ...

  3. python结束线程类_Python线程指南(转)

    1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...

  4. 类ThreadLocal的使用与源码分析

    变量值的共享可以使用public static的形式,所有的线程都使用同一个变量.如果每个线程都有自己的共享变量,就可以使用ThreadLocal.比如Hibernat的session问题就是存在Th ...

  5. 线程局部变量 ThreadLocal

    文章目录 线程局部变量 ThreadLocal ThreadLocal 的作用和目的 ThreadLocal 的应用场景 ThreadLocal 的使用方式 (1) 在关联数据类中创建 private ...

  6. Delphi中的线程类

    Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...

  7. 自定义线程池-线程类和任务类代码实现

    自定义线程池-实现步骤 1:编写任务类(MyTask),实现Runnable接口; 2:编写线程类(MyWorker),用于执行任务,需要持有所有任务; 3:编写线程池类(MyThreadPool), ...

  8. 线程类C++多线程框架(一)--------- new一下就启动一个线程

    之前笔者几篇文章介绍了改线程类的文章. 关联文章的地址 几年前写过一个C++的多线程框架,虽然写完了,但是人一懒做了一次说明以后就没影了,最近把代码整顿了一下,预备发到github上,在这里,再把这个 ...

  9. Thread线程类及多线程

    1.进程.线程.并发.并行是什么? 1)进程:操作系统中可以运行多个任务(程序),这些运行的任务(程序)被称为进程.程序的运行产生进程(内存空间.程序执行的堆栈),可以这样说,进程是作为操作系统分配资 ...

最新文章

  1. python取消任务的方法_python-即使忽略CancelledError,如何取消任务执...
  2. uva 11105——Semi-prime H-numbers
  3. 黑科技揭秘:阿里云如何做到从业务宕机到恢复业务运行只用一分半钟时间
  4. C#传递参数调用exe程序
  5. 对于electron-react-boilerplate(ERB)的学习笔记(legacy)
  6. 开源论坛软件 NodeBB 中存在多个严重漏洞
  7. 神奇的G1——Java全新垃圾回收机制
  8. 3dmax简单制作方法
  9. WPF监控云台控制组件实现简单方案
  10. 谷粒商城笔记 + 完整代码 + 课件资料(基础篇)(学习记录)
  11. 论文笔记(一)《Intriguing properties of neural networks》
  12. Webhooks应用概述
  13. LTE学习---PLMN选网(23.122协议R9)
  14. python设置excel单元格宽度
  15. 研发团队角色与职责分析
  16. KMP字符串模式匹配
  17. 数据分析----BCG模型(波士顿矩阵分析)
  18. 关于蓝屏错误IRQL_NOT_LESS_OR_EQUAL
  19. 直径为30至100 nm细胞外囊泡外泌体 CD9/CD63外泌体标志物
  20. Matlab从日文转换成英文或中文转换成英文

热门文章

  1. C++11 (多线程)并发编程总结
  2. CAS SSO 单点登录 实例
  3. 步步为营-20-XML
  4. jquery 动态生成html后click事件不触发原因
  5. Velocity的layout功能
  6. 设计模式之美:Type Object(类型对象)
  7. 怎样才有资格被称为开源软件
  8. JSON——Java中的使用
  9. 《iOS 9应用开发入门经典(第7版)》——第1章,第1.6节小结
  10. IOS8 PUSH解决方法