zoukankan      html  css  js  c++  java
  • Java中的ThreadLocal

    ThreadLocal:一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据;

    ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值;

    使用方法:

    static final ThreadLocal<T> sThreadLocal = new ThreadLocal<T>();
    sThreadLocal.set()
    sThreadLocal.get()

    get、set方法:

    //set 方法
    public void set(T value) {
          //获取当前线程
          Thread t = Thread.currentThread();
          //实际存储的数据结构类型
          ThreadLocalMap map = getMap(t);
          //如果存在map就直接set,没有则创建map并set
          if (map != null)
              map.set(this, value);
          else
              createMap(t, value);
      }
      
    //getMap方法
    ThreadLocalMap getMap(Thread t) {
          //thred中维护了一个ThreadLocalMap
          return t.threadLocals;
     }
     
    //createMap
    void createMap(Thread t, T firstValue) {
          //实例化一个新的ThreadLocalMap,并赋值给线程的成员变量threadLocals
          t.threadLocals = new ThreadLocalMap(this, firstValue);
    }

    每个线程持有一个ThreadLocalMap对象;

    为了解决多线程中相同变量的访问冲突问题;

    示例:

    public class ThreadLocalTest {
    
        static ThreadLocal<String> threadLocal = new ThreadLocal<>();
    
        public static void main(String[] args) {
            //在main线程中添加main线程的本地变量
            threadLocal.set("mainVal");
            //新创建一个子线程
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("子线程中的本地变量值:"+threadLocal.get());
                }
            });
            thread.start();
            //输出main线程中的本地变量值
            System.out.println("mainx线程中的本地变量值:"+threadLocal.get());
        }
    }

    输出:

    mainx线程中的本地变量值:mainVal
    子线程中的本地变量值:null

  • 相关阅读:
    人人学IoT 助学思维导图
    基于netty4.x开发时间服务器
    JAVA实现的截屏程序
    java获取硬盘ID以及MAC地址
    神经网络joone_engin模式识别示范,eclipse
    神经网络/人工智能 开源库
    双目测距
    OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
    一个java 开源神经网络引擎 joone
    用Java开源项目JOONE实现人工智能编程
  • 原文地址:https://www.cnblogs.com/xiaoxiao1120/p/13384311.html
Copyright © 2011-2022 走看看