计算机基础知识复习8.22

锁升级机制

无锁->偏向锁->轻量级锁->重量级锁

线程A进入synchronized开始抢锁,JVM会判断当前是否是偏向锁的状态,如果是就会根据Mark Word中存储的线程ID来判断,当前线程A是否就是持有偏向锁的线程,如果是,则忽略check,线程A直接执行临界区内的代码。如果Mark Word里的线程不是线程A,就会通过自旋尝试获取锁,如果获取到了,就将Mark Word中的线程ID改为自己,如果竞争失败了,就会立马撤销偏向锁,膨胀为轻量级锁。后续的竞争线程都会通过自旋来尝试获取锁,如果自旋成功那么锁的状态仍然是轻量级锁,然而竞争失败,锁会膨胀为重量级锁,后续等待的竞争的线程都会被阻塞

如何解决热key问题

在Redis集群架构中对热key进行复制,在Redis集群架构中,由于热key的迁移粒度问题,无法将请求分散至其他数据分片,导致单个数据分片的压力无法下降。此时,可以讲对应热key进行复制并迁移至其他数据分片,例如将热key apple复制到3个内容完全一样的key并名为apple1,apple2,apple3,将这三个key迁移到其他数据分片来解决单个数据分片的热key压力

什么是幻读

当同一个查询在不同的时间产生不同的结果集时,事务中就会出现所谓的幻想问题,例如select执行两次,但是第二次返回了第一次没有返回的行,则出现了幻读

接口和抽象类

实现接口的关键字是implements 继承抽象类的关键字extends, 一个类可以实现多个接口,一个类只能继承一个抽象类

接口中只有定义,不能有方法实现,而抽象类可以有定义与实现,方法可在抽象类中实现

接口成员变量默认为public static final必须赋初值,不能被修改,所有的成员方法都是public

抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值,抽象方法被abstract修饰,不能被private,static,synchronized修饰。

操作系统实现进程协作采用的方法

锁机制:任何想要进入临界区的线程,必须先执行加锁操作,若加锁操作顺利通过,则线程可进入临界区,在完成对临界区的访问后再执行解锁操作,以释放该临界资源

PV信号量:信号量表示资源的数量,通过P操作,使得信号量减一,当信号量<0 则线程进入阻塞等待状态。通过V操作使得信号量加1,当信号量<=0,唤醒一个等待中的线程。

参考资料:
小林coding

相关推荐
你的人类朋友9 分钟前
浅谈Object.prototype.hasOwnProperty.call(a, b)
javascript·后端·node.js
前行的小黑炭15 分钟前
设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
android·java·kotlin
Java技术小馆20 分钟前
如何设计一个本地缓存
java·面试·架构
仙灵灵32 分钟前
前端的同学看过来,今天讲讲jwt登录
前端·后端·程序员
Home32 分钟前
一、Java性能优化--Nginx篇(一)
后端
陈随易34 分钟前
VSCode v1.99发布,王者归来,Agent和MCP正式推出
前端·后端·程序员
ShooterJ35 分钟前
海量序列号的高效处理方案
后端
你的人类朋友38 分钟前
CommonJS模块化规范
javascript·后端·node.js
小码编匠1 小时前
C# 实现西门子S7系列 PLC 数据管理工具
后端·c#·.net
Postkarte不想说话1 小时前
Ubuntu24.04搭建TrinityCore魔兽世界
后端