ThreadLocal的使用
来源:互联网 发布:怎么改淘宝的支付宝 编辑:程序博客网 时间:2024/06/14 00:07
ThreadLocal的作用就是让每个线程绑定自己的变量值,用于存储每个线程的私有数据。
一 ThreadLocal类的get方法和null值
package com.lanhuigu.JavaBase.thread.threadlocal;public class RunTest {public 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());// 获取值}}
当第一次调用get方法时,由于没有放入过值,返回null,
通过set方法放入值,之后通过get方法可以获取当前线程的私有数据。
创建一个数据工具类:
package com.lanhuigu.JavaBase.thread.threadlocal;public class DataTools {public static ThreadLocal<String> tl = new ThreadLocal<String>();}
创建线程A:
package com.lanhuigu.JavaBase.thread.threadlocal;public class ThreadA extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubtry {for (int i = 0; i < 100; i++) {DataTools.tl.set("A_Thread_" + System.currentTimeMillis());System.out.println("线程A获取的值:" + DataTools.tl.get());// 获取当前线程私有数据Thread.sleep(200);}} catch (InterruptedException ex) {// TODO: handle exceptionex.printStackTrace();}}}
创建线程B:
package com.lanhuigu.JavaBase.thread.threadlocal;public class ThreadB extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubtry {for (int i = 0; i < 100 ; i++) {DataTools.tl.set("B_Thread_" + System.currentTimeMillis());System.out.println("线程B获取的值:" + DataTools.tl.get());// 获取当前线程私有数据Thread.sleep(200);}} catch (InterruptedException ex) {// TODO: handle exceptionex.printStackTrace();}}}
测试类:
package com.lanhuigu.JavaBase.thread.threadlocal;public class RunTest {public static void main(String[] args) {try {ThreadA threadA = new ThreadA();threadA.start();Thread.sleep(3000);ThreadB threadB = new ThreadB();threadB.start();} catch (InterruptedException ex) {// TODO: handle exceptionex.printStackTrace();}}}
运行结果:
从程序运行结果,线程获取属于自己的私有数据,证明了ThreadLocal实现线程私有数据保证
数据的隔离性。
三 如何让get方法第一次获取的值不为null
写一个类继承与ThreadLocal,重写initialValue()方法,设置get的默认值。
eg:
package com.lanhuigu.JavaBase.thread.threadlocal;public class ThreadLocalExt extends ThreadLocal{@Overrideprotected Object initialValue() {// TODO Auto-generated method stub//return super.initialValue();return "设置默认值,第一次获取不在为null";}}
阅读全文
0 0
- ThreadLocal的使用- -
- ThreadLocal的使用
- ThreadLocal 的使用
- ThreadLocal的使用
- 关于ThreadLocal的使用
- Threadlocal类的使用
- ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal的使用
- java ThreadLocal的使用
- 关于ThreadLocal的使用
- ThreadLocal的优雅使用
- ThreadLocal的使用
- 关于ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal 的使用
- ThreadLocal的使用
- 412. Fizz Buzz
- Mac下配置Sdk platform-tools目录的环境变量
- html javascript 函数(二)
- 排序--1
- 一个码农6年技术成长经历的总结和收获
- ThreadLocal的使用
- 标准模板库的一些函数
- 51nod 1770 数数字
- A
- 关于maven项目加载maven库以外的jar包找不到报错
- App开发《知亦学》之--编写登录界面
- highways
- .NET正则基础之——平衡组
- LibCurl HTTP部分详细介绍