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

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

      

    愿你我,长安,长乐,不悲,不怂, 和生活一刚到底,游刃有余,笑傲此生。
  • 相关阅读:
    007 Java引用数据类型
    005 Java数组
    002 Java 引用数据类型示例
    001 Java入门和简介
    2.接口测试工具-Postman
    1、接口测试-前言
    测试工程师的进阶之路
    接口测试概述
    期末作品检查
    完成个人中心—导航标签
  • 原文地址:https://www.cnblogs.com/oldthree3/p/13211223.html
Copyright © 2011-2022 走看看