线程:类ThreadLocal的使用
类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的使用相关推荐
- 线程本地ThreadLocal的介绍与使用!
ThreadLocal简介 我们通过上两篇的学习,我们已经知道了变量值的共享可以使用public static变量的形式,所有的线程都使用同一个被public static修饰的变量. 那么如果我们想 ...
- Java线程局部变量ThreadLocal
ThreadLocal基础 ThreadLocal类可以让每个线程绑定自己的值,它就像一个全局存放数据的盒子,盒子中可以存放每个线程的私有数据. ThreadLocal类只有一个无参的构造函数,因此实 ...
- python结束线程类_Python线程指南(转)
1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...
- 类ThreadLocal的使用与源码分析
变量值的共享可以使用public static的形式,所有的线程都使用同一个变量.如果每个线程都有自己的共享变量,就可以使用ThreadLocal.比如Hibernat的session问题就是存在Th ...
- 线程局部变量 ThreadLocal
文章目录 线程局部变量 ThreadLocal ThreadLocal 的作用和目的 ThreadLocal 的应用场景 ThreadLocal 的使用方式 (1) 在关联数据类中创建 private ...
- Delphi中的线程类
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...
- 自定义线程池-线程类和任务类代码实现
自定义线程池-实现步骤 1:编写任务类(MyTask),实现Runnable接口; 2:编写线程类(MyWorker),用于执行任务,需要持有所有任务; 3:编写线程池类(MyThreadPool), ...
- 线程类C++多线程框架(一)--------- new一下就启动一个线程
之前笔者几篇文章介绍了改线程类的文章. 关联文章的地址 几年前写过一个C++的多线程框架,虽然写完了,但是人一懒做了一次说明以后就没影了,最近把代码整顿了一下,预备发到github上,在这里,再把这个 ...
- Thread线程类及多线程
1.进程.线程.并发.并行是什么? 1)进程:操作系统中可以运行多个任务(程序),这些运行的任务(程序)被称为进程.程序的运行产生进程(内存空间.程序执行的堆栈),可以这样说,进程是作为操作系统分配资 ...
最新文章
- python取消任务的方法_python-即使忽略CancelledError,如何取消任务执...
- uva 11105——Semi-prime H-numbers
- 黑科技揭秘:阿里云如何做到从业务宕机到恢复业务运行只用一分半钟时间
- C#传递参数调用exe程序
- 对于electron-react-boilerplate(ERB)的学习笔记(legacy)
- 开源论坛软件 NodeBB 中存在多个严重漏洞
- 神奇的G1——Java全新垃圾回收机制
- 3dmax简单制作方法
- WPF监控云台控制组件实现简单方案
- 谷粒商城笔记 + 完整代码 + 课件资料(基础篇)(学习记录)
- 论文笔记(一)《Intriguing properties of neural networks》
- Webhooks应用概述
- LTE学习---PLMN选网(23.122协议R9)
- python设置excel单元格宽度
- 研发团队角色与职责分析
- KMP字符串模式匹配
- 数据分析----BCG模型(波士顿矩阵分析)
- 关于蓝屏错误IRQL_NOT_LESS_OR_EQUAL
- 直径为30至100 nm细胞外囊泡外泌体 CD9/CD63外泌体标志物
- Matlab从日文转换成英文或中文转换成英文