• ThreadLocal


    1、ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问。

    2、hreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题 :

         1.在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写.

         2.而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。

    3、先了解一下ThreadLocal类提供的几个方法:

    public T get() { } // 用来获取ThreadLocal在当前线程中保存的变量副本

    public void set(T value) { } //set()用来设置当前线程中变量的副本

    public void remove() { } //remove()用来移除当前线程中变量的副本

    protected T initialValue() { } //initialValue()是一个protected方法,一般是用来在使用时进行重写的
    ————————————————

    4、ThreadLocalMap是ThreadLocal类的一个静态内部类,它实现了键值对的设置和获取,每个线程中都有一个独立的ThreadLocalMap副本,它所存储的值,只能被当前线程读取和修改。ThreadLocal类通过操作每一个线程特有的ThreadLocalMap副本,从而实现了变量访问在不同线程中的隔离。还有一点就是,ThreadLocalMap存储的键值对中的键是this对象指向的ThreadLocal对象,而值就是你所设置的对象了。
    ————————————————

    5、从上面的结构图,我们已经窥见ThreadLocal的核心机制:

    • 每个Thread线程内部都有一个Map。
    • Map里面存储线程本地对象(key)和线程的变量副本(value)
    • 但是,Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值。
  • 相关阅读:
    笔试算法题(45):简介
    笔试算法题(44):简介
    笔试算法题(43):布隆过滤器(Bloom Filter)
    笔试算法题(42):线段树(区间树,Interval Tree)
    笔试算法题(41):线索二叉树(Threaded Binary Tree)
    笔试算法题(40):后缀数组 & 后缀树(Suffix Array & Suffix Tree)
    笔试算法题(39):Trie树(Trie Tree or Prefix Tree)
    笔试算法题(38):并查集(Union-Find Sets)
    笔试算法题(37):二叉树的层序遍历 & 最长递增的数字串
    mysql cmd 启动服务
  • 原文地址:https://www.cnblogs.com/lgg20/p/12320547.html
Copyright © 2020-2023  润新知