当前位置:网站首页>【直播笔记0629】 并发编程二:锁
【直播笔记0629】 并发编程二:锁
2022-06-30 02:51:00 【在学习的王哈哈】
并发编程二:锁
1. 对象有什么组成?
锁:解决线程并发数据不一致的问题
synchronized: 多个线程序列化执行
信号量
一个object占多少个字节:16个字节
一个java对象包含四个部分
前两个:对象头
- markWord 标记字 8bytes
- classpoint 类指针 4bytes
- instance data 实例数据 4~8
- padding 不能被8字节整除
对齐存在的意义:方便整理

2. 锁–悲观锁
synchronized关键字:就是给对象头markword上做了个标记
markword三个作用:
- 记录锁
- 配合垃圾回收
- 存放hashcode

3. 乐观锁CAS
解决数据不一致的另外一种解决方案:CAS 自旋锁
compareAndSwap
自带原子属性:不会被打断
自旋锁
往回写做一次比较,相同则写入,不同则读出继续做相同操作,直到一次成功。
3.1 ABA问题
其他线程修改数次最后值和原值相同。
也可以是指向问题。
如何解决:加一个版本号
3.2 本身就要具备原子性
如果判断没被修改后后,然后被别的线程修改了
cas本身就要具备原子性
- cpu级别支持cas操作,底层支持。但是这个操作没有原子性,可能会被其他线程所打断。
- 如果是multy process多处理器,就加lock,就可以保障原子性,本质上还是悲观锁。

lock底层实现方式: 关中断,锁总线等

4. synchronized底层实现
4.1 轻量级和重量级
轻量级: CAS 转圈等
重量级:排队等
java起一个线程,os就会起一个线程 1比1线程。
go是1对多。
jvm解决不了的问题,扔给os操作系统去解决,这就叫重量级锁
轻量级:jvm自己就解决了; whlie循环消耗cpu资源,
重量级:交给os去解决,线程进入等待队列; 不需要消耗cpu资源
为什么要有重量级?
线程多少决定, 轻度竞争用轻量级,重度竞争用重量级。
4.1 synchronized内部的锁升级过程?

轻量级什么时候升级为重量级锁?
5. 偏向锁
考的少了。
睡了5秒后,再上锁

5.1 什么是偏向锁?
偏向锁就是一个标记
将第一个线程id放在 锁的markword上。
减少锁竞争,只有一个线程的时候(第一个线程),不启动锁机制,使用锁标记
所有用到锁的地方百分之八九十的地方只有一个线程。
有了其他线程,就进行了锁升级
5.2 为什么睡眠5秒后,偏向锁就启动了
如果明确知道环境一定是多线程的,没有必要启动偏向锁。
jvm启动的时候,一堆的线程要启动,一开始没有必要启动偏向锁,默认4秒后启动。
类型指针
对象在内存中的存储布局
32位,64位机器值得是指针长度,寻址空间
2的32位, 4G, 内存最大只能4个G
jvm64位虚拟机的 class pointer指针为4字节,默认启动压缩
方法论
项目驱动
从脉络到细节
边栏推荐
- What files does a CA digital certificate contain? How to view SSL certificate information?
- 2022护网行动在即,关于护网的那些事儿
- Jupyter notebook displays a collection of K-line graphs
- Série de tutoriels cmake - 02 - génération de binaires à l'aide du Code cmake
- 外汇交易平台哪个好?有监管的资金就安全吗?
- 迅为恩智浦iTOP-IMX6开发平台
- Intel-Hex , Motorola S-Record 格式详细解析
- Pytorch学习(二)
- Cmake tutorial series-01-minimum configuration example
- Study diary: February 15, 2022
猜你喜欢

2022年7月深圳地区CPDA数据分析师认证

并发请求下如何防重复提交

High paid programmers & interview questions series 63: talk about the differences between sleep (), yield (), join (), and wait ()

Idea remote debugging remote JVM debug

论文回顾:Playful Palette: An Interactive Parametric Color Mixer for Artists

Wechat applet page Jump and parameter transfer
![[on] [DSTG] dynamic spatiotemporalgraph revolutionary neural networks for traffic data impact](/img/c3/f9d6399c931a006ca295bb1e3ac427.png)
[on] [DSTG] dynamic spatiotemporalgraph revolutionary neural networks for traffic data impact

FDA ESG regulation: digital certificate must be used to ensure communication security

Jupyter notebook显示k线图集合

Software testing skills, JMeter stress testing tutorial, transaction controller of logic controller (25)
随机推荐
最小栈详解
How to use redis to realize the like function
Intel hex, Motorola S-Record format detailed analysis
Several key points recorded after reviewing redis design and Implementation
Cmake tutorial series -05- options and variables
迅為恩智浦iTOP-IMX6開發平臺
CMake教程系列-01-最小配置示例
IBM websphere通道联通搭建和测试
What files does a CA digital certificate contain? How to view SSL certificate information?
Three solutions to forced hibernation of corporate computers
Network neuroscience -- a review of network Neuroscience
Xunwei NXP itop-imx6 development platform
Shenzhen CPDA Data Analyst Certification in July 2022
What are the three paradigms of database
Welfare lottery | what are the highlights of open source enterprise monitoring zabbix6.0
Heavy attack -- ue5's open source digital twin solution
c#控制台格式化代码
外汇交易平台哪个好?有监管的资金就安全吗?
A quick look at the statistical data of 23 major cyber crimes from 2021 to 2022
CMake教程系列-03-依赖管理