计算机基础知识复习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

相关推荐
x***B4111 分钟前
Rust unsafe代码规范
开发语言·rust·代码规范
k***85841 分钟前
删除文件夹,被提示“需要来自 TrustedInstaller 的权限。。。”的解决方案
android·前端·后端
love530love1 分钟前
【笔记】解决 Stable Diffusion WebUI 启动 “找不到llama_cpp模块”
运维·windows·笔记·python·stable diffusion·github·llama
豆浆whisky2 分钟前
构建可观测的Go应用:指标、日志与追踪的统一之道|Go语言进阶(21)
linux·运维·后端·golang
第二只羽毛2 分钟前
单例模式的初识
java·大数据·数据仓库·单例模式
4***g8943 分钟前
Java进阶-SpringCloud设计模式-工厂模式的设计与详解
java·spring cloud·设计模式
__万波__3 分钟前
二十三种设计模式(五)--建造者模式
java·设计模式·建造者模式
h***67373 分钟前
Flask:后端框架使用
后端·python·flask
Victor3564 分钟前
Redis(157)Redis的连接问题如何解决?
后端
北郭guo4 分钟前
Java设计模式 【理论+代码实现】 让你从小白到大佬的蜕变
java·开发语言·设计模式