• 超简单的ThreadLocal


      多线程访问同一个共享变量的时候容易出现并发问题,很多时候我们是通过加锁解决的。但是,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。那么这就要提到 ThreadLocal 了。比如很多公司做单点登录会用到 ThreadLocal ,通过拦截 token 去获取当前登录信息。

    ThreadLocal<Integer> local = new ThreadLocal<>();
    
    new Thread(()->{
        local.set(7);
        System.out.println(local.get());
    }).start();
    
    new Thread(()->{
        local.set(5);
        System.out.println(local.get());
    }).start();

    set

    1. local.set() 首先是获取到当前线程 t
    2. 然后获取到这个线程的 ThreadLocalMap ,可以看到里面是个类似 map 的结构,然后 Entry 本身是个数组,也就是说差不多一个 数组 的注册表。
    3. map.set(this,value) 就是把当先线程的引用作为 key ,以  键值对  的形式存到enrty中

    get

    也是获取到当前线程后,根据与运算计算出 当前线程 在数组的中的位置,在根据 key(也就是当前线程引用) 获取到value。

  • 相关阅读:
    实验五
    实验四
    实验三
    实验二
    寄存器(内存访问)
    实验一
    寄存器
    Mermaid 绘图总结
    电脑查看系统版本
    _ZNote_Chrom_插件_Chrom运行Android软件_APK
  • 原文地址:https://www.cnblogs.com/wlwl/p/15039227.html
Copyright © 2020-2023  润新知