首页 > Windows开发 > 详细

ThreadLocal 基本API

时间:2020-06-30 09:15:16      阅读:50      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/oldthree3/p/13211223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!