Volatile与ThreadLocal

news2024/11/23 5:35:22

一:Volatile

线程安全三方面

1 可见性:一个线程对共享变量修改,另一个线程可以看到最新结果
2 有序性: 一个线程内,代码编写按顺序执行
3 原子性: 一个线程内多行代码以一个整体运行,期间不能有其他线程的代码插队

Volatile可以保证可见性有序性
原子性
一行代码(例如a++)编译成字节码对应多行指令,不能保证原子性,多线程下指令交错,结果就不准确

如图:a操作的多条指令执行间,b操作进来执行,修改了数值,
但是a继续操作,还是在a之前读到的数上操作。由此造成结果错误

可见性:
一个线程对共享变量进行修改,另一个线程没有得到最新结果
Volatile修饰变量可以解决

有序性:
编译器和处理器为了优化程序性能对指令序列进行重新排序的一种手段,有时会改变
程序语句的先后顺序

二: ThreadLocal

对一个变量来说,多线程访问必须考虑线程安全问题。可以考虑加锁、cas来保证

ThreadLocal采用相反的做法:实现线程对象的资源隔离,每个线程各用各的资源

线程1用资源1,线程2用资源2,不再争抢,避免争用引发的线程安全问题。

那此时用局部变量不行吗?局部变量线程安全,但是无法共享

线程间资源隔离,线程内资源共享

在这里插入图片描述

以上代码实现了connection的资源隔离,每个线程进来获取的connection都是不同的

原理:每个线程内都有一个ThreadLocalMap类型的成员变量,用来存储资源对象
ThreadLocal为key,资源对象为value

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查询网站ip地址

IP地址是Internet Protocol(互联网协议)的一部分,是一个32位的数字,用于标识网络中的设备。它可以让不同的设备在网络上进行通信和交流,是网络通信的基础。IP地址的应用非常广泛,它可以用于识别和定位设备&…

最新数据, 芯片工程师平均月薪高达2.56W !

近日,据2023年一季度经济运行数据统计,其中提及全国居民人均可支配收入达到10870,同比增长3.8%。 2023年第一季度中,共有20个行业平均月薪超1W,除了大家所熟悉的金融行业薪资水平排名靠前,一些高技术制造业…

iOS SFSpeechRecognizer 语音识别

SFSpeechRecognizer 属于 Speech 框架,在 iOS 10 首次出现,并在 iOS13 中进行了比较重大的更新,在 iOS 13 上支持离线语音识别以及语音分析。WWDC2019 展示了其在 AI 领域的进步,其中 iOS 13 设备内置语音识别就是一项比较不错功能…

第二届中国抗衰老化妆品产业发展论坛暨国粹国妆品牌与文化交流会在京召开

消费日报网讯(记者 王儒)4月18日,以“国粹国妆 抗衰美丽“为主题的第二届中国抗衰老化妆品产业发展论坛暨国粹国妆品牌与文化交流会在北京召开。大会旨在挖掘国粹力量,搭建沟通交流合作的平台,推动中国高端化妆品品牌建…

网工神器:PNETLab模拟器踩坑过程

目录 0、前言 1、PNETLab介绍 2、下载安装 2.1 下载 2.2 导入 2.3 启动 2.4 注册和登录 3、汉化 4、镜像 5、控制台 5.1、HTML控制台 5.2、默认控制台 6、总结 0、前言 由于工作需要,想测试一下SD-WAN,手边既没有测试环境又没有测试设备。突然想…

八年软件测试生涯,是时候做出改变了

五年前,我在南方的大城市:广州,做着一个快乐的游戏测试,工作不太忙,对一切技术充满了好奇心。测试工作不专业,也不受重视。但我有自己的快乐。工作不忙的时候,我今天学学Python,明天…

uniapp + vue3开发中组合式函数必须是一个同步函数

目录 vue3中的组合式函数用法: 官网示例异步组合式函数:同步函数写法 改造成导出async组合式函数时: uniapp无法使用async组合式函数的原因: vue3中的组合式函数使用时,导出的组合式函数必须是一个同步函数。 vue3…

塔望3W消费战略全案丨元力参堂:从0到1,超级大单品跨越式增长

元力参堂 客户:上海弥富生物科技有限公司 品牌:元力参堂 服务:3W消费战略 品牌全案 项目背景 2020年初,一场突如其来的疫情让我们按下了暂停键,大家经历着疫情的考验。长时间的隔离、封闭影响到生产、消费、投资、物…

ChatGPT3分钟写的千字福尔摩斯小说,老师都分辨不出真假

AI写小说!感受ChatGPT3分钟写的千字福尔摩斯小说!逆天! ChatGPT写悬疑小说 其实在最初,测试者要求ChatGPT写一个5000字的故事,但AI居然直接罢工,还言简意赅:“不,太长了。” 于是…

MySQL库和表的操作

1 什么是数据库?什么是SQL? 科学的组织和存储数据,如何高效获取和维护数据 2 一条SQL语句的执行过程 SQL语句就是一个数据库能够识别的指令语言 在实际操作过程中,创建连接,连接MySQL的server mysql -uroot -P330…

PMP证书备考攻略+PMP知识点汇总

一,考PMP好处多 1.能力提升 大型项目,领导专业团队 2.升职加薪 晋升管理岗,优先升职加薪 3.招投标加分 具有PMP证书,企业招标有加分 4.转型利器 助力转型,拓宽职业发展 5.公司支持 企业鼓励学习,报销费用 6…

LVS负载均衡-DR

1.DR模式中每台主机都有一个VIP地址 虚拟网址放在lo网卡上(回环网卡) arp_ignore1 Arp_announce2 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址 2.内核参数修改 3.vim /etc/rc.conf 开机自启动 Chmod x /etc/rc.d…

Spring Security实战(六)—— 跨域与CORS

跨域是一种浏览器同源安全策略,即浏览器单方面限制脚本的跨域访问。 一、认识跨域 跨域(Cross-Origin)指的是在Web开发中,当一个网页的内容要从不同源(即不同的域名、协议或端口)获取时,就会发…

时序分析与时序约束知识总结

文章目录 时序分析如何查看时序报告时序分析的分类和任务HOLD违例修复:SETUP违例修复:时序违例的修复 时序约束约束的分类时序约束的作用SDF文件OCVPVT共同路径悲观效应(CPP)setup time与hold time和什么有关clock Jitter与clock Skewsetup和hold裕度计算…

10.java程序员必知必会类库之邮件

前言 邮件功能在当前互联网应用中已经是很成熟的功能,也是作为java程序员应该掌握的技能。常见使用场景有: 电商软件开电子发票,需要发到用户邮箱里面生产实时报警,需要发到邮箱里面银行软件申请的征信报告,电子账单…

Django框架之Admin站点管理

Django的强大体现在其内置的Admin模块可以使得开发人员在不做任何编码的情况下就拥有网站后台管理功能。 概述 内容发布:负责添加、修改、删除内容 内容访问查看 配置admin应用 在settings.py中添加django.contrib.admin 默认已添加 创建管理员账户 python man…

九、1~8文章的阶段案例

一、案例 现在我们来做一个相对综合一点的练习:书籍购物车 案例说明: 1.在界面上以表格的形式,显示一些书籍的数据;2.在底部显示书籍的总价格;3.点击或者-可以增加或减少书籍数量(如果为1,那…

【论文精读】ISBI 2022 - Retinal Vessel Segmentation with Pixel-wise Adaptive Filters

【论文精读】ISBI 2022 - Retinal Vessel Segmentation with Pixel-wise Adaptive Filters 【论文原文】:Retinal Vessel Segmentation with Pixel-wise Adaptive Filters 【作者信息】:Li, Mingxing and Zhou, Shenglong and Chen, Chang and Zhang, …

【Linux】线程-线程控制

线程控制 线程控制线程创建线程终止线程等待分离线程 线程控制 使用线程需要注意的是,需要引入头文件pthread.h,并且在编译的时候,需要使用-lpthread 线程创建 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*…

QT中TCP的学习

文章目录 qt中TCP的实现 qt中TCP的实现 学习视频 QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程 下方的信号都是系统提供的,我们只需要写相应的槽函数 A、服务器: 创建QTcpServer对象启动服务器(监听&…