• 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值,不会影响其他线程。

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

      

    愿你我,长安,长乐,不悲,不怂, 和生活一刚到底,游刃有余,笑傲此生。
  • 相关阅读:
    2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛 Fruit Ninja I
    HDU 1045
    ZOJ 3946 Highway Project
    python基础知识
    粘包问题以及解决方法
    socket套接字
    网络编程 互联网协议 tcp原理
    反射 魔法方法 单例模式
    classmethod与staticmethod isinstance与issubclass
    封装 多态
  • 原文地址:https://www.cnblogs.com/oldthree3/p/13211223.html
Copyright © 2020-2023  润新知