美文网首页
ThreadLocal的官方文档

ThreadLocal的官方文档

作者: 大风过岗 | 来源:发表于2020-06-09 18:41 被阅读0次

ThreadLocal的官方文档

Class ThreadLocal<T>

java.lang.Object
java.lang.ThreadLocal<T>

直接子类:
InheritableThreadLocal

public class ThreadLocal<T> extends Object

该类提供了线程局部变量。这些变量不同于那些正常的变量,正常的变量是每个线程通过调用get或set方法访问的是同一个。而对于线程局部变量来说,每个线程都有它自己的、独立的初始化副本。ThreadLocal在类中通常都是一些私有的静态变量,它把状态变量和线程关联在一起。(例如,用户ID、事务ID)。

例如,下面的这个类会为每个线程生成一个唯一的标识符。在第一次调用ThreadId.get()方法的时候,就会为线程分配一个线程ID,并在后续的调用中保持不变。

import java.util.concurrent.atomic.AtomicInteger;

 public class ThreadId {
     // Atomic integer containing the next thread ID to be assigned
     private static final AtomicInteger nextId = new AtomicInteger(0);

     // Thread local variable containing each thread's ID
     private static final ThreadLocal<Integer> threadId =
         new ThreadLocal<Integer>() {
             @Override protected Integer initialValue() {
                 return nextId.getAndIncrement();
         }
     };

     // Returns the current thread's unique ID, assigning it if necessary
     public static int get() {
         return threadId.get();
     }
 }

只要当前线程存活,并且ThreadLocal实例处于可访问时, 每个线程都拥有对线程局部变量的一个隐式引用。当线程结束之后,所有的ThreadLocal实例的副本都交由垃圾回收器处理(除非,还有对这些副本的引用)。

构造方法

  ThreadLocal()                   // 创建一个线程局部变量

方法总结

|修饰符和数据类型 |方法 | 描述 |
|:----- |:------|:----------------------------- |
|T | get() | 返回此ThreadLocal变量在当前线程中的副本 |
|protected T | initialValue() | 返回当前线程的ThreadLocal的初始值 |
|void | remove() | 移除当前线程的TreadLocal中的值 |
|void | set(T value ) | 把当前线程的ThreadLocal副本设置为指定的值|
|static <S> ThreadLocal<S> | withInitial(Supplier<? extends S> supplier) | 创建一个ThreadLocal变量 |

方法详情

1、构造方法详情

public ThreadLocal()

描述:
创建一个ThreadLocal实例。

2、initialValue方法

返回当前线程的ThreadLocal的初始值。在线程第一次通过get()方法访问变量的时候,会调用此方法,除非此线程之前调用过set方法(在这种情况下,即:如果线程之前调用过set方法,那么在第一次访问get()方法的时候,不会调用initialValue方法)。正常情况下,每一个线程只会调用一次initialValue方法,但是如果在调用remove()方法之后,又调用了get()方法的话,还会再次调用initialValue()方法。

该实现会返回null。如果编程者想让ThreadLocal变量拥有一个初始值的话,那么就必须自定义一个ThreadLocal的子类,并重写initialValue方法。我们通常都是直接使用匿名内部类。

3、withInitial方法

方法描述:
创建一个ThreadLocal变量,变量的初始值取决于Supplier的get方法调用。

类型参数:

S - 线程局部变量的值的数据类型。

supplier - supplier用于确定初始值

返回值:

一个新的线程局部变量

Throws:

NullPointerException - 如果指定的supplier为null的话,将返回NullPointerException

4、get方法

方法描述:
返回当前线程的线程局部变量的副本。如果此线程的实例没有值的话,它会用initialValue()方法的返回值进行初次初始化。

返回值:
返回当前线程的ThreadLocal实例的副本。

5、set方法

方法描述:
把当前线程的线程局部变量的副本设置为指定值。大多数子类不用重写此方法,只需要依赖initialValue()方法设置线程局部变量的值即可。

6、remove方法

方法描述:
移除当前线程的线程局部变量的值。如果此线程后面又读取线程局部变量的值,会再次调用initialValue()方法对该线程的线程局部变量进行再次初始化,除非在此期间,当前线程重置了
该值。remove操作可能导致在当前线程中多次调用initialValue方法。

备注
官方文档地址

相关文章

  • ThreadLocal的官方文档

    ThreadLocal的官方文档 Class ThreadLocal java.lang.Objectjav...

  • ThreadLocal 由浅入深,深入解读

    ThreadLocal 介绍 Java官方文档中的描述:ThreadLocal 类用来提供线程内部的局部变量。这种...

  • 说实话ThreadLocal真不是啥高级的东西

    什么是ThreadLocal? 从 Java 官方文档中的描述:ThreadLocal 类用来提供线程内部的局部变...

  • 头条面试官手把手教学 ThreadLocal

    介绍 我们看下JDK文档的官方描述:ThreadLocal类用来提供线程内部等局部变量,这种变量在多线程环境下访问...

  • ThreadLocal

    从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过g...

  • 腾讯Bugly集成Tinker热更新

    一、官方文档 首先,官方文档,官方文档,官方文档!Bugly Android热更新 二、个人总结 1.配置Appl...

  • Java 第三方资源收集

    mybatis官方文档翻译 mybatis-spring官方文档翻译 kafka 官方文档翻译

  • 阿里Sophix热修复

    一、官方文档 首先,官方文档,官方文档,官方文档!Sophix 热修复 二、个人总结 1.本地调试成功,发布之后为...

  • 线程

    1. 问:ThreadLocal了解吗?您能给我说说他的主要用途吗? 答: 从JAVA官方对ThreadLocal...

  • ElasticSearch集群监控(四)

    以后安装东西,看官方文档,看官方文档,看官方文档,看官方文档。本来就像装个Marvel做集群监控的,毕竟Head插...

网友评论

      本文标题:ThreadLocal的官方文档

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