码迷,mamicode.com
首页 > Windows程序 > 详细

ThreadLocal 基本API

时间:2020-06-30 01:00:33      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:其他   oid   线程安全   构造函数   理解   roc   val   strong   初始   

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

标签:其他   oid   线程安全   构造函数   理解   roc   val   strong   初始   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!