Java中,synchronized和lock是用来处理并发过程中,线程之间互斥关系,即被synchronized和lock修饰的变量或方法或代码段能保证同一时间有且只有一个线程在处理,这样可以保证其它线程能够处理最新的数据,而且数据在中途不会被其它线程所修改。此外,还有一个功能就是保证数据修改的可见性。
可见性表示一个线程在修改一个数据时,对于其它线程是可见的,即其它线程是会知道这个数据在被修改了,从而会等数据修改完后再取值,保证取到的值是最新的。
首先,要了解一下内存。目前内存包括缓存和内存,由于CPU的计算速度快于读取内存数据的速度,所以为了缩短读写时间,在原有的内存的基础上,又加了缓存(买电脑的时候经常会看到一级缓存,二级缓存,三级缓存,缓存越大,价钱越高),CPU会把最常用的数据从内存加载到缓存中来提高数据的读写速度(CPU还有自己的寄存器,该读写速度最快,容量最小)。在Java中,每个线程都有自己的一个working memory(工作存储),该空间就是放在寄存器和缓存中。当一个线程在修改一个变量时,会检查自己的工作存储中是否存在该变量,如果存在就会直接修改,如果不存在,就会从内存中加载该变量后再修改,然后将更新后的变量再写回内存中。这个时候,如果同时存在A和B两个线程在修改同一个变量,就会出现问题(比如A修改的数据被B修改的数据所覆盖等)。所以为了保证数据的正确性,B线程需要知道A在修改变量(即A修改的动作对于B是可见的),等A修改完后写回内存后,在重新加载变量再修改。
其次要了解一个happen-before(是偏序关系)的关系,表示actionA happen-before actionB。所有线程的工作在内存中都是一个action,java的内存中存储了所有线程工作的action,即指令集。在Java中,一个变量如果被修饰为volatile,那么对于该变量的操作(指令)都要遵循happen-before原则,即actionB需要在actionA完成后才能开始执行。在多线程中,一个线程要读一个变量值的action,需要等待其它所有线程对该变量写acitons后才能执行。所以可见性的实现方法就是对相关的指令进行的排序,保证数据的一致性。Java的内存模型中,定义了happen-before的规则:
- 程序顺序规则:一个线程中的每个操作,happens-before于随后该线程中的任意后续操作
- 监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的获取
- volatile变量规则:对一个volatile域的写,happens-before于对这个变量的读
- 传递性:如果A happens-before B,B happens-before C,那么A happens-before C
- start规则:如果线程A执行线程B的start方法,那么线程A的ThreadB.start()happens-before于线程B的任意操作
- join规则:如果线程A执行线程B的join方法,那么线程B的任意操作happens-before于线程A从TreadB.join()方法成功返回。
相关推荐
只需要用一张图片素材文档选择器.zip
浙江大学842真题09-24 不含答案 信号与系统和数字电路
无标题baci和jbaci
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
实体商品销售源码最新优化.zip
内容概要:本文档详细介绍了戴尔存储MD1400机柜的安全注意事项、电源指示灯解释、故障排除方法以及硬件维护步骤,包括卸下和安装直流电源设备、硬盘驱动器和背板的具体操作流程。 适用人群:IT运维人员、数据中心管理员和技术支持工程师。 使用场景及目标:在维护和管理戴尔存储MD1400机柜时作为参考指南,确保正确安装和故障排查,避免安全隐患和设备损坏。 其他说明:文档提供了丰富的图文指导,帮助使用者更好地理解和执行相关操作。
PyClass 课程计划Noisebridge Python 课程每周一晚上 7 点至 9 点(太平洋时间)在旧金山 Noisebridge 二楼电子室举行。自 2024 年 8 月起,该课程目前暂停。请参阅 wiki 页面了解更多信息。本课程免费!如果您希望捐款,请捐赠给 Noisebridge。建议捐款15 美元、50 美元、200 美元以上建议每月捐款每月 10 美元、20 美元、40 美元、80 美元以上所有 Python 课程均遵循Noisebridge 反骚扰政策、 Noisebridge 冲突解决指南和 recurse.org 社交规则课后,我们欢迎您提供反馈! 在此提交表格内容课程课程描述新生阅读迭代次数Noisebridge Python 课程至少早在 2015 年就已经存在,拥有许多不同的讲师和版本。从 2017 年到 2018 年,该课程似乎由Jared Garst负责。(?)。从 2023 年到 2024 年,该课程由Travis Briggs负责。如果您有其他关于此类历史的信息想要分享,请在此处创建 PR、
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
万达广场作为城市综合体的代表,在中国各地的地理分布数据集覆盖了2006至2021年。这些数据详细记录了万达广场的多个关键指标,包括项目名称、项目信息、具体地点、开业时间、商业面积以及精确的经度和纬度。万达广场不仅是商业地产开发的先行者,还以其成熟的商业模式、完善的产业链和丰富的商业资源,在全国范围内形成了独立的大型商圈。这些综合体集购物、餐饮、文化、娱乐等多种功能于一体,对提升城市商业档次、增加就业岗位、创造税收以及丰富群众消费需求等方面产生了显著的社会效益。数据集提供了420条样本,为研究中国区域经济发展特征及其未来趋势提供了宝贵的信息资源。
正在月下弹琴的古装美女flash场景动画.zip
理光 MP C8003 是一款彩色激光多功能数码复合机。 【基础性能】 打印复印速度:黑白和彩色打印 / 复印速度均可达 80 页每分钟,能够快速高效地完成大量文档的输出任务,有效提高工作效率 分辨率:拥有 1200x4800dpi 的高分辨率,可输出色彩鲜艳、细节丰富、图像清晰的文档和图像,满足专业级的打印和复印需求,尤其适合对色彩精度要求较高的设计图纸、宣传资料等文件的输出 首张输出时间:黑白首张复印时间为 4.7 秒,彩色首张复印时间为 6.3 秒,在启动打印或复印任务时无需长时间等待,可迅速响应,进一步提升工作效率 纸张容量:标准配置的纸张容量为单 2500 页抽屉和双 550 页抽屉,还可通过扩展将纸张容量从 3700 页提升至 8100 页,能够满足不同规模的打印任务需求,减少纸张添加的频率 【功能多样性】 多功能一体:集复印、打印、扫描、传真功能于一身,可满足办公室多样化的文档处理需求,一台设备即可替代多台单一功能的设备,节省空间和成本 扫描功能:具备高速扫描能力,可通过多种扫描至选项将原件扫描并以电子形式分发,支持将扫描后的文件直接发送至个人移动设备
《The Annotated Transformer》环境配置
深度学习大作业基于resnet50和vgg16卷积神经网络的汉字书法识别项目源码+训练集+测试集 操作步骤 将下载的训练集和测试集,解压到工程中 运行对应的data.py文件,进行转录,将原始数据集转录为numpy矩阵,生成data.npy及label.npy 运行对应的train.py进行训练 运行test.py使用训练完成的网络测试。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
代码
图表效果及代码实现讲解链接:https://blog.csdn.net/zhangjiujiu/article/details/143996614
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
营销策划 -魔術絲-黑松露香蕉莓果饮品-新品发布会产品介绍-终版.pptx
成都市数据条例.docx