ThreadLocal 基本API

Posted 星辰忧沙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThreadLocal 基本API相关的知识,希望对你有一定的参考价值。

ThreadLocal 是什么呢?

  定义:提供线程局部变量; 一个线程局部变量在多个线程中,分别有独立的值(副本)。

  特点:简单(开箱即用)、快速(无额外开销)、安全(线程安全)。

  场景: 多线程场景(资源持有、线程一致性、并发计算、线程安全等场景)。

ThreadLocal 基本API

  构造函数ThreadLocal<T>()

  初始化initialValue()

  访问器get/set

  回收 remove

 

public class ThreadLocalTest {

   public static  ThreadLocal<String> s = new ThreadLocal<String>(){
       @Override
       protected String initialValue(){
           System.out.println("Initial Value run .........");
           return Thread.currentThread().getName();
       }

   };

   public  static  void main(String[] argv){
       System.out.println(s.get());
       s.set("good");
       System.out.println(s.get());
   }
}

结果:

Initial Value run .........
main
good

Process finished with exit code 0

1.initialValue只执行了一次,而且需要调用get()方法去触发。

下面的代码会让你更好的理解:一个线程局部变量在多个线程中,分别有独立的值(副本)

public class ThreadLocalTest {

   public static  ThreadLocal<String> s = new ThreadLocal<String>(){
       @Override
       protected String initialValue(){
           System.out.println("Initial Value run .........");
           return Thread.currentThread().getName();
       }

   };

   public  static  void main(String[] argv){

       System.out.println(s.get());
       s.set("good");
       new Thread(){
           @Override
           public void run(){
               System.out.println(s.get());

           }
       }.start();
       System.out.println(s.get());
   }
}

  

结果:

Initial Value run .........
main
good
Initial Value run .........
Thread-0

Process finished with exit code 0

 结果里面的

good   是代码 最后一行的输出。


在不同的线程里, 使用了get() 会触发 其initialValue方法。在另外的线程set值,不会影响其他线程。

一个线程局部变量在多个线程中,分别有独立的值(副本)

  

 

以上是关于ThreadLocal 基本API的主要内容,如果未能解决你的问题,请参考以下文章

ThreadLocal源码分析理解弱引用和内存泄漏

ThreadLocal源码分析理解弱引用和内存泄漏

ThreadLocal源码分析理解弱引用和内存泄漏

ThreadLocal原理及使用示例

ThreadLocal的基本理解

onActivityResult 未在 Android API 23 的片段上调用