首页 > 其他分享 >线程数据共享与安全-ThreadLocal

线程数据共享与安全-ThreadLocal

时间:2023-01-09 16:14:00浏览次数:44  
标签:set 对象 threadlocal 数据共享 ThreadLocal 源码 线程

1.ThreadLocal作用

在一个线程中,线程安全的共享数据(实现在同一个线程中共享数据,从而解决多线程数据安全的问题)

分析:1.数据:可以是普通变量,对象,数组等。(在一个线程中)一个数据对应一个ThreadLocal对象,线程销毁,对象释放。

          2.安全:如何理解-之后进行源码分析

2.ThreadLocal原理分析

2.1ThreadLocal方法(set,get)

先创建threadlocal对象

调用set方法:

threadLocal1.set(xxx);
xxx就是你要在这个线程中共享的数据

调用get方法:由于threadLocal1是static对象

直接 创建threadlocal对象所在类的类名.threadLocal1.get();

此处()里面什么都不填,why?后面分析源码

2.2ThreadLocal源码

set方法源码:

get方法源码:

2..3ThreadLocal的DeBug分析

执行set方法之后:table下多出10这个size

在10中寻找referent(对象)-此处作为empty的key值

                 value--------做出作为empty的value值

与创建threadlocal对象时候的debug出的对象对比:

二者匹配,说明threadlocal内部就是这样的原理来实现的,通过thread.currentThread()方法获取到当前线程,使用threadLocal对象与共享的数据一一对应,从而保证线程安全。

标签:set,对象,threadlocal,数据共享,ThreadLocal,源码,线程
From: https://www.cnblogs.com/zitw/p/17037323.html

相关文章

  • python接口自动化,解决多线程多次执行conftest.py文件内容
    最近在做接口自动化,在使用ytest-xdist多线程执行用例时发现了一个问题,就是conftest.py文件里的内容,也被多次执行了, conftest.py放的是登录等前后置方法,多次执行这不是......
  • python多线程应用-批量下载拉勾网课程
    importconcurrentimportosimportreimporttimefromcollections.abcimportIterablefromCrypto.CipherimportAESfromtool.request_mainimportrequestMain......
  • python多线程应用-批量下载视频课程(宠医堂)
    importosimportreimportshutilimporttimefromcollections.abcimportIterableimportconcurrent.futuresfromCrypto.CipherimportAESimportrequestsfrom......
  • Task 带参数和返回值的多线程调用
    staticvoidMain(string[]args){//无参数异步vartasks=newList<Task>();for(inti=0;i<5000;i++)......
  • ThreadLocal源码解析及实战应用
    作者:京东物流闫鹏勃1什么是ThreadLocal?ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal......
  • ThreadLocal原理及使用场景
    ThreadLocalThreadLocal意为线程本地变量,用于解决多线程并发时访问共享变量的问题。所谓的共享变量指的是在堆中的实例、静态属性和数组;对于共享数据的访问受Java的内存模型......
  • Flutter 陈航 23-事件循环 Event Loop 异步 线程 Isolate
    本文地址目录目录目录23|单线程模型怎么保证UI运行流畅?EventLoop事件循环模型微任务队列异步任务Future简单案例官方综合案例改造后的案例异步函数同步等待await不......
  • 36 多线程 知识点
    //了解进程//进程(Process)是计算机中的程序关于某数据集合上的一次运行活动//是系统进行资源分配和调度的基本单位,是操作系统结构的基础//说人话:打开一个应用程序就是在......
  • 守护线程ScheduledThreadPoolExecutor中两个方法的区别demo
    packagecom.pzistart.msgdemoimpl.renlock;importjdk.nashorn.internal.ir.Block;importjavax.annotation.security.RunAs;importjavax.sound.sampled.FloatContr......
  • 工作总结之线程池和原子类篇
    目录工作总结之线程池和原子类篇前言解决思路具体实现代码期间遇到的问题有待优化的地方工作总结之线程池和原子类篇前言起因是,项目里面的同步代码的执行时间过久(20小......