zoukankan      html  css  js  c++  java
  • 多线程(二)ThreadLocal

    ThreadLocal提供了线程的局部变量,每个线程都可以通过set()get()来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,实现了线程的数据隔离~。

    简要言之:往ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。

    管理connection

    数据库连接池的连接交由ThreadLocal来进行管理。ThreadLocal能够实现当前线程的操作都是用同一个Connection,保证了事务!

    ThreadLocal原理总结

    1. 每个Thread维护着一个ThreadLocalMap的引用

    2. ThreadLocalMap是ThreadLocal的内部类,用Entry来进行存储

    3. 调用ThreadLocal的set()方法时,实际上就是往ThreadLocalMap设置值,key是ThreadLocal对象,值是传递进来的对象

    4. 调用ThreadLocal的get()方法时,实际上就是往ThreadLocalMap获取值,key是ThreadLocal对象

    5. ThreadLocal本身并不存储值,它只是作为一个key来让线程从ThreadLocalMap获取value

    正因为这个原理,所以ThreadLocal能够实现“数据隔离”,获取当前线程的局部变量值,不受其他线程影响~

    ThreadLocal设计的目的就是为了能够在当前线程中有属于自己的变量,并不是为了解决并发或者共享变量的问题

  • 相关阅读:
    Centos7 JDK8安装配置
    select2
    docker 删除多个退出的容器
    redis 批量删除多个key
    Dockerfile 文件命令
    Docker部署go示例
    php 导入 excel 文件
    rabbitmq安装
    rabbitmq之php客户端使用实例
    k8s
  • 原文地址:https://www.cnblogs.com/yjh1995/p/13514632.html
Copyright © 2011-2022 走看看