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

相关推荐
夏微凉.2 分钟前
【JavaEE进阶】Spring 事务和事务传播机制
java·数据库·sql·mysql·spring·java-ee
yangpipi-2 分钟前
数据结构(C语言版)-2.栈和队列
c语言·开发语言·数据结构
还在学习进步4 分钟前
C语言第九周课——经典算法
c语言·开发语言·算法
吴冰_hogan6 分钟前
nacos集群源码解析-cp架构
java·spring boot·spring·架构·服务发现·springcloud
阿七想学习7 分钟前
数据结构《链表》
java·开发语言·数据结构·学习·链表
Yaml47 分钟前
Java的六大排序
java·算法·排序算法
极客代码9 分钟前
【Python TensorFlow】进阶指南(续篇二)
开发语言·人工智能·python·深度学习·tensorflow
XiaoLiuLB10 分钟前
Tomcat NIO 配置实操指南
java·tomcat·nio
Be_Somebody13 分钟前
[这可能是最好的Spring教程!]Maven的模块管理——如何拆分大项目并且用parent继承保证代码的简介性
java·spring boot·spring·spring入门
计算机学姐22 分钟前
基于Python的高校成绩分析管理系统
开发语言·vue.js·后端·python·mysql·pycharm·django