ThreadLocal类

ThreadLocal是什么?

    ThreadLocal,线程本地变量,也叫线程本地存储。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLocal是用来维护线程中的变量不被其他线程干扰而出现的一个结构,内部包含一个ThreadLocalMap类,该类为Thread类的一个局部变量,该Map存储的key为ThreadLocal对象自身,value为我们要存储的对象,这样一来,在不同线程中,持有的其实都是当前线程的变量副本,与其他线程完全隔离,以此来保证线程执行过程中不受其他线程的影响。

ThreadLocal结构:


四个主要的方法:

/**
	 * 设置当前线程的线程局部变量的值。
	 */
	void set(Object value); 
	
	/**
	 * 该方法返回当前线程所对应的线程局部变量。 
	 */
	public Object get();
	
	/**
	 * 将当前线程局部变量的值删除,目的是为了减少内存的占用,
	 * 该方法是JDK 5.0新增的方法。
	 * 需要指出的是,当线程结束后,对应该线程的局部变量将自动被垃圾回收,
	 * 所以显式调用该方法清除线程的局部变量并不是必须的操作,
	 * 但它可以加快内存回收的速度。 
	 */
	public void remove();
	
	/**
	 * 返回该线程局部变量的初始值,该方法是一个protected的方法,
	 * 显然是为了让子类覆盖而设计的。
	 * 这个方法是一个延迟调用方法,在线程第1次调用get()或set(Object)时才执行,并且仅执行1次。
	 * ThreadLocal中的缺省实现直接返回一个null。
	 * @return
	 */
	protected Object initialValue();

ThreadLocal内存泄漏问题:

    每一个线程对资源副本都有一个weekRefrence:只要线程还在运行,使用ThreadLocal就是可以获取的。当一个线程运行结束销毁时,所有的资源副本都是可以被垃圾回收的(ThreadLocalMap对象保存在Thread对象中,当某个线程终止后,存储在其中的线程隔离的变量,也将作为Thread实例的垃圾被回收掉,所以完全不用担心内存泄漏的问题),这段注释表明,ThreadLocal的使用是不会造成内训泄露的。

参考:https://www.cnblogs.com/xzwblog/p/7227509.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值