Java并发的笔记

打算记录自己的学习情况,尽量不摆烂,另外一件事要有始有终,要弄完

如果多个线程处理同一个变量,读跟写都保证不了

2024.7.22》》》》》》》》》》》》

2.1.1volatile的实现原理

volatile不会引起线程上下文的切换和调度

一致性更新:处理器修改完某个变量会告诉其他处理器让它们更新最新版本的值,保证信息的一致

排他锁:某个处理器获得锁,就不让其他处理器操作这个变量。就是synchronized保证写后读,这不是2.1的重点

volatile能保证,当一个处理器写了某个被volatile修改的数据,其他处理器能正确的读到被修改后的值,就是保证读的正确

(小明):那写呢?不保证了?

不保证了,所以要充分理解volatile和syronchized,让它们各司其职,只盲目使用syronchized就有性能的大问题

内存屏障:屏障屏障,反正就是不让访问。内存的某个变量根据操作系统的某个约定使得在做一些处理变量的时候不让别人访问。可能有一个int version = 1;如果1就让访问,0不让访问

反正就是不让访问了。我感觉呢,应该屏障也是通过锁了去那个变量的导线,导致后面所有想访问这个变量,都得等着这根线没人用才可以。嗯,这也是锁的底层原理

缓冲行,跟cache沾边。当多个处理器操作缓存时会走一根大导线。处理器发送任何指令都是电压传输,如果2个处理器同时发命令两个电压造成电压叠加必定会造成混乱,最好情况就是其中一个处理器的指令执行被吃了(这也很恐怖),如果两个电压抵消,两个处理器的指令白干活。所以通过一些方法(应该也是锁),我走这根线你就先别走了,你在我后面,等我执行完你再执行。

缓存行由多个缓存线组成,如果某个处理器操作某个缓存线,别的处理器你就先等会。排队才有规则性

原子操作:要么都成功要么都失败,打游戏辛苦几个小时最后一步没存档。都回滚到存档开始数据重新打。这里侧重于某些指令希望一块都执行完并且不能有错

缓存行填充,缓存拿需要的变量时会去内存读,但是会一口气加载一个缓存行,也就是缓存行有64bit但是想要的变量就8bit,它会把剩下的56bit根据那个变量地址后面加载56bit。这个策略可能是好事,比如long[]  数组一口气没准都加载进去了。但是如果有a变量和b变量都需要操作,且b变量的操作要在a变量操作后执行,那就坏了,b和a绑在一块完全没法弄。所以希望某些操作的变量的bit很大。比如boolean。它放进去64bit占满了。

缓存行填充就是读内存地址会一口气加载一个缓存行的大小,64bit,32bit。然后某些变量可能有顺序关系,所以进行优化把一些关键的变量bit变的很大甚至填满

缓存命中:缓存离cpu近,内存离cpu远,如果缓存就有内存的数据就操作缓存而不是操作内存数据

写命中:首先,由于缓存命中,cpu会更“青睐”缓存行,跟缓存行打交道。操作完的数据写回缓存行。写了蛮多数据后,根据程序缓存行会把数据给内存的数据,缓存行再等着cpu继续操作数据。这也是计算机的理想操作数据场景

写缺失:当缓存行想往回更新内存数据时,内存的那块变量区域没了。迷失的孩子找不到回去的路。这就是写缺失。比如内存变量是一个即将垃圾回收的没用变量,操作这个变量更新内存数据时,已经被jvm回收,‘死了’,那就写缺失了。或者无法更新数据,已经到了家门口但是家里人不给你开门,也会写缺失

可见性:多个线程对同一个变量进行修改,能读到其他处理修改之后正确的数据

可见性 = volatile干的活 = 一致性更新 = 某个变量被处理器写后,其他处理器会嗅探到新数据并重新读新数据的值。

保障读,不保障写

这里在讲啥呢?

录制_2024_07_22_21_53_12_901

哇趣,上传视频后简直糊到爆炸,家人们先凑活看吧。后面有办法我再补回来

这里都能看懂了,重点是理解清楚视频,这里的‘嗅探’,‘一致性’。都是刚刚讲的清楚明白的概念。

在这里,通过某个处理器修改更新值后,其他处理器马上放弃自己处理的值重新读值再处理。这也是有些写后读的思想(其实整本书全部都是为了实现写后读,就是怎么实现的了)

2.1.2volatile的优化

其实就是刚刚讲的缓存行填充,8bit的东西结果后面56bit全放进去了,万一中间有一些逻辑。那就完了。所以防止这种情况干脆把关键需要的变量放大甚至占满。

2.2synchronized原理

锁方法,锁的是实例化的对象。

锁静态方法,锁类

锁方法块,锁对于锁的那个对象

通过读取对象头的信息知道是不是要上锁,上什么锁。

知道要上锁后,就用monitor对象锁东西。分成monitorenter和monitorexit两个对象放到开始和结束

家人们,觉得写的好就用去大厂的无敌代码小手点个赞,俺看到了会觉得自己做到事是有意义的,会更有决心更完。评论收藏都可以

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

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

相关文章

pycharm+pyqt6配置

1、pip install pyqt6 pyqt6-toools 2、pycharm配置 配置:designer Program::D:\Python39\Lib\site-packages\qt6_applications\Qt\bin\designer.exe Working directory: $ProjectFileDir$ 配置:pyuic6.exe Program&#xff1a…

调度子系统在特定时间执行

时序逻辑调度器设计模式允许您安排Simulink子系统在指定时间执行。以下模型说明了这种设计模式。 时序逻辑调度器图表包含以下逻辑: 时序逻辑调度器的关键行为 时序逻辑调度器图表包含两个状态,它们以不同的速率调度函数调用子系统A1、A2和A3的执行&…

DVWA靶场超(详细教程)--跨站攻击(XSS+CSRF)

一、XSS 反射型xss 打开dvwa的Reflected Cross Site Scripting (XSS) (1)low等级 查看页面源码(ctrlu)该界面有提交按钮和输入框 在输入框随便输入点字符,点击提交 可以看见输入的helloword嵌入到界面中。 View sou…

PS启动提示Adobe Creative Cloud丢失或损坏。您可以尝试修复来解决这个问题,如何解决

一般为找到这个路径下C:\Program Files (x86)\Common Files\Adobe\Adobe Desktop Common\ADS的Adobe Desktop Service.exe文件。如果不在C盘也可以直接搜索其他盘找到此文件。 直接删除此文件即可解决,如果删除不了可以进任务管理器先结束进程再删除。鼠标右键结束任…

DolphinScheduler安装教程

DolphinScheduler安装教程 前期准备工作 jdk 1.8mysql 5zookeeper 3.4.6hadoop 2.6psmisc yum -y install psmisc 解压安装包 # 将安装包apache-dolphinscheduler-2.0.8-bin.tar.gz放置/opt/download目录下 # 解压缩 tar -zxvf apache-dolphinscheduler-2.0.8-bin.tar.gz -C …

看准JS逆向案例:webpack逆向解析

🔍 逆向思路与步骤 抓包分析与参数定位 首先,我们通过抓包工具对看准网的请求进行分析。 发现请求中包含加密的参数b和kiv。 为了分析这些加密参数,我们需要进一步定位JS加密代码的位置。 扣取JS加密代码 定位到JS代码中的加密实现后&a…

PGSQL学习-基础表结构

1 访问数据库 创建好数据库后,你可以有三种方式访问数据库 运行PostgreSQL的交互式终端程序,它被称为psql, 它允许你交互地输入、编辑和执行SQL命令。 使用一种已有的图形化前端工具,比如pgAdmin或者带ODBC或JDBC支持的办公套件…

红人点集登录逆向+接口逆向:SHA256算法和Webpack反爬

🔍 引言 红人点集采取了一系列加密和限制措施,主要是对于参数加密和登录token加密。今天利用Python与JavaScript逆向工程技术,实现逆向登录然后请求接口获取数据。 🔍 思路与步骤详解 🔧 解密登录接口参数&#xf…

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法

【k8s故障处理篇】calico-kube-controllers状态为“ImagePullBackOff”解决办法 一、环境介绍1.1 本次环境规划1.2 kubernetes简介1.3 kubernetes特点二、本次实践介绍2.1 本次实践介绍2.2 报错场景三、查看报错日志3.1 查看pod描述信息3.2 查看pod日志四、报错分析五、故障处理…

机器学习·概率论基础

概率论 概率基础 这部分太简单,直接略过 条件概率 独立性 独立事件A和B的交集如下 非独立事件 非独立事件A和B的交集如下 贝叶斯定理 先验 事件 后验 在概率论和统计学中,先验概率和后验概率是贝叶斯统计的核心概念 简单来说后验概率就是结合了先验概…

如何将mp4格式的视频压缩更小 mp4格式视频怎么压缩最小 工具软件分享

在数字化时代,视频内容成为信息传播的重要载体。然而,高清晰度的视频往往意味着较大的文件体积,这给存储和分享带来了一定的困扰。MP4格式作为目前最流行的视频格式之一,其压缩方法尤为重要。下面,我将为大家详细介绍如…

浏览器渲染揭秘:从加载到显示的全过程;浏览器工作原理与详细流程

目录 浏览器工作原理与流程 一、渲染开始时间点 二、渲染主线程的渲染流程 2.1、渲染流程总览 2.2、渲染具体步骤 ①解析html-Parse HTML ②样式计算-Recalculate Style ③布局-Layout ④分层-Layer 相关拓展 ⑤绘制-Paint ⑥分块-Tiling ⑦光栅化-Raster ⑧画-D…

Python爬虫 instagram API获取instagram帖子数据信息

这个instagram接口可以通过url链接直接获取相关帖子信息。如有需求,可点击文末链接联系我们。 详细采集页面 https://www.instagram.com/p/CqIbCzYMi5C/ 请求参数 返回示例 { "__typename": "GraphSidecar", "accessibility_caption&qu…

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

🎯要点 🎯算法随机图模型数学概率 | 🎯图预期度序列数学定义 | 🎯生成具有任意指数的大型幂律网络,数学计算幂律指数和平均度 | 🎯随机图分析中巨型连接分量数学理论和推论 | 🎯生成式多层网络…

购物车案例(源码分享)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

排序算法与复杂度介绍

1. 排序算法 1.1 排序算法介绍 排序也成排序算法(Sort Algorithm),排序是将一组数据,依照指定的顺序进行排序的过程 1.2 排序的分类 1、内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存&am…

android13禁用某个usb设备

总纲 android13 rom 开发总纲说明 目录 1.前言 2.触摸设备查看 3.功能修改 3.1 禁用usb触摸 3.2 禁用usb键盘 3.3 禁用usb遥感 4.查看生效与否 5.彩蛋 1.前言 用户想要禁止使用某些usb设备,需要系统不能使用相关的usb设备,例如usb触摸屏,usb键盘,usb遥感等等usb…

Python零基础快速入门!

“人生苦短,我学python”是编程届的名言。用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言。拥有了某一个语言的功底,再来学习另外一种语言应该是十分快速的。编程理念都十分相似,只是看看语言的差异性。带…

Python函数的介绍;变量的作用域;递归函数

一、函数的创建和调用 1.1、什么是函数 函数就是执行特定任和以完成特定功能的一段代码 1.2、为什么需要函数 复用代码 隐藏实现细节 提高可维护性 提高可读性便于调试 1.3、函数的创建 def 函数名(输入函数)函数体(return XXX) 1.4、函数的调用 函数名 (实际参数) 二、…

当当网数据采集:Scrapy框架的异步处理能力

在互联网数据采集领域,Scrapy框架以其强大的异步处理能力而著称。Scrapy利用了Python的异步网络请求库,如twisted,来实现高效的并发数据采集。本文将深入探讨Scrapy框架的异步处理能力,并展示如何在当当网数据采集项目中应用这一能…