zoukankan      html  css  js  c++  java
  • 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值,不会影响其他线程。

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

      

    愿你我,长安,长乐,不悲,不怂, 和生活一刚到底,游刃有余,笑傲此生。
  • 相关阅读:
    关于loose.dtd和xhtml1transitional.dtd等文档类型定义模型中CSS失效的解决办法。
    JSON扫盲帖+JSON类教程
    jQuery中Ajax事件
    JQuery绑定事件 时如何传递参数
    xml include 另外一个xml文件
    ubuntu 两张网卡时网络设置
    Letcode 题:pow(x,n)
    Java编程语言中sleep()和yield()的区别
    JProfiler与eclipse集成
    zz 字符串相关
  • 原文地址:https://www.cnblogs.com/oldthree3/p/13211223.html
Copyright © 2011-2022 走看看