摘要:
Mysql为了解决事物并发执行导致的一些列为题,引入了锁,在InnoDB存储引擎中,锁分为表锁和行锁两类。 1. 共享锁和独占锁(S和X) 1.1 共享锁(S锁) 共享锁也叫S锁,S锁与S锁是兼容关系,不会被阻塞,S锁与X锁是不兼容的,会被阻塞。 加S锁读取数据: SELECT ... LOCK I 阅读全文
摘要:
在这之前你需要对索引的存储方式有一定的了解,这里我们只讲表空间的结构,不讲概念相关的东西。其次我们应该知道数据的存储结构的设计很大一部分原因是为了加速数据的查找和插入,也就是取数据和村数据。 1. 表空间结构 在图1和图2中,里面的extent是区的意思,我们知道Mysql是以页(一个页16KB)方 阅读全文
摘要:
ReentrantLock是一个可重入的独占锁,内部使用AQS实现。state记录着持有锁的线程的进入同步代码块的次数。 1. AQS的基本实现Sync Sync是一个抽象类,他没有重写tryAcquire方法,但是他多了一个nonfairTryAcquire方法,该方法是一个非公平获取锁资源的方法 阅读全文
摘要:
AbstractQueuedSynchronizer 是一个抽象的同步等待队列。juc下面大多数锁都是使用到了AQS。除了获取资源和释放资源的方法外,AQS基本上将其他同步等待队列的逻辑都实现了,比如线程进入队列同步等待、响应中断、唤醒线程等。如果我们想实现一个简单的同步等待队列,那只需要实现AQS 阅读全文
摘要:
HashMap是基于哈希表的Map接口的实现。不能保证Node的顺序。允许key和value为null。当然key是不能重复的。 继承的类 AbstractMap 提供了一些Map基本实现的抽象类。 实现的接口 Map 声明了一些常用的方法。 Cloneable 对象克隆标记接口。 Serializ 阅读全文
摘要:
进程和线程 1. 进程是系统进行资源分配和调度的基本单位,一个进程至少有一个线程; 2. 线程是CPU分配的最小单位,真正占用CPU的是线程; main 函数在启动时,会在JVM中启动一个进程,而mian函数所在的线程就是这个进程中的一个线程,也称为主线程。 Runnable 接口创建线程 实现 接 阅读全文
摘要:
方法区中的运行时常量池(Runtime Constant Pool) ` 此时打印的是 , 存放于方法区中的运行时常量池,1执行时,去常量池中查找,是否存在 ,如果不存在就创建常量 。2执行,也去常量池查找是否存在 ,存在就直接将 的地址指向 ,最后 返回的就是 ,因为都指向同一块内存地址。 堆(h 阅读全文
摘要:
volatile 是Java虚拟机提供的轻量级的同步机制。 1. 保证可见性 2. 不保证原子性 3. 禁止指令重排 可见性 当多个线程操作同一个变量时,每个线程都会将该变量拷贝一份到自己工作内存中,然后线程完成操作之后,将变量写回主内存。因此可见性就是一个线程在修改变量之后,回通知其他线程,告知改 阅读全文
摘要:
在Java代码中,类型的加载、连接和初始化过程都是在程序运行期间完成的。 加载:查找并加载类的二进制数据; 连接: 验证:确保被加载的类的正确性; 准备:为类的静态变量分配内存,并将其初始化为默认值; 解析:把类中的符号引用转换为直接引用 初始化:为类的静态变量赋予正确的初始值; 例如上面的代码,是 阅读全文
摘要:
原理网上一大堆,比我说的清楚,大家可以去看看,这里就不说了。 安装配置 注意 plugins 的处理,因为需要安装一个 插件,在 版本中无法使用 进行安装,会提示找不到,所以只能自己上 去下载。 在处理plugins之后,注意配置一下 使用 配置delayExchange,队列,并且绑定。 ` 发送 阅读全文