美文网首页
ThreadLocal

ThreadLocal

作者: 天探女 | 来源:发表于2020-02-29 09:05 被阅读0次

ThreadLocal 为了编写更优雅的多线程程序

当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

ThreadLoacl 不是一个线程,而是Thread的一个局部变量

从线程的角度看,目标变量就像是线程的本地变量

使用

接口方法

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

使用场景

数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外一个线程只能等待。这样就造成性能降低。如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既可以保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点时占用了较多的空间。

相关文章

网友评论

      本文标题:ThreadLocal

      本文链接:https://www.haomeiwen.com/subject/golfqftx.html