threadlocal的过期数据_ThreadLocal -不是线程它是一个容器,用于保存数据的对象

这个容器的特点是是保存一两个值,一个值是当前的线程,另一个用户指定的值:

1:直接保存数据的测试

//1:声明tl对象,在一个项目里,只要有一个ThreadLocal(保存线程局部的变量)对象

ThreadLocal tl = new ThreadLocal();

tl.set("Jack");//保存值

//获取值

Object obj = tl.get();//获取值

System.err.println("obj ="+obj);//Jack

2:用于保存线程局部的变量

(变量三种:1:全局的变量成员变量,2:局部的变量,3:线程局部的变量。)

在一个项目里, 只有一个ThreadLocal对象就可以为所有线程提供服务。如何保证只有一个TL对象:单一的实例。

用工厂模式来创建一个tl对象:

package cn.utils;

import java.util.Random;

/**

* ThreadLocal对象是用于保存数据的,保存数据时,会用当前的线程做引用,用用户的对象做值

*

*/

public class ThreadLocalFactory {

//1:声明一个唯一的静态的tl对象

private static ThreadLocal threadLocal;

//2:建议在static代码块中实例化这个类

static{

threadLocal= new ThreadLocal();

}

//3:从tl对象中取值

public static Object get(){

//4:先从里面取值

Object obj = threadLocal.get();

//5:如果没有,则obj==null:true

if(obj==null){

//如果没有值,创建一个新的放到tl对象里面去

obj = new Random().nextInt(100);

//放到

threadLocal.set(obj);

}

//总是会保证obj有值的

return obj;

}

}

3.remove方法

public coid remove(){

ThreadLocalMap m = getMap(Thread.currentThread());

if(m != null)

m.remove(this);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值