摘要:
Condition Condition原理 Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒。 在AQS中存在两个FIFO队列:同步队列 和 等待队列。本篇文章主要是讲condition实现原理(即等待队里),同步 阅读全文
摘要:
线程启动原理 当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行;但是这并不意味着线程就会立即运行,只有当cpu分配时间片时,这个线程获得时间片时,才开始执行run()方法;start()方法去调用run(),而run()方 阅读全文
摘要:
CPU Cache 的数据写入 随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cache 离 CPU 核心相当近,因此它的访问速度是很快的,于是它充当了 CPU 与内存之间的缓存角色。 CPU Cache 通常分为三级缓存 阅读全文
摘要:
1.什么是布隆过滤器? 首先,我们需要了解布隆过滤器的概念。 布隆过滤器(Bloom Filter)是一个叫做 Bloom 的老哥于1970年提出的。我们可以把它看作由二进制向量(或者说位数组)和一系列随机映射函数(哈希函数)两部分组成的数据结构。相比于我们平时常用的的 List、Map 、Set 阅读全文
摘要:
一、JVM内存分配策略 关于JVM的内存结构及内存分配方式,不是本文的重点,这里只做简单回顾。以下是我们知道的一些常识: 1、根据Java虚拟机规范,Java虚拟机所管理的内存包括方法区、虚拟机栈、本地方法栈、堆、程序计数器等。 2、我们通常认为JVM中运行时数据存储包括堆和栈。这里所提到的栈其实指 阅读全文
摘要:
1. 锁原理 - 信号量 vs 管程 在并发编程领域,有两大核心问题:互斥与同步,互斥即同一时刻只允许一个线程访问共享资源,同步,即线程之间如何通信、协作,一般这两大问题可以通过信号量和管程来解决。 信号量 信号量(Semaphore)是操作系统提供的一种进程间常见的通信方式,主要用来协调并发程序对 阅读全文
摘要:
/**手写简易的线程池 * @author 胡庆安 * @version V1.0 * @Package Thread.pool * @date 2020/10/23 10:57 * @Copyright © 2010-2020 爬山虎科技(扬州)股份有限公司 */ public class Hqa 阅读全文
摘要:
public class HqaLock { private static final Unsafe unsafe = reflectGetUnsafe(); private static final long ownerOffset; /** * 锁是否被持有(1)是,(0)否 */ Atomic 阅读全文
摘要:
1. 运行时数据区 1.1 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的 字节码的行号指示器。在Java虚拟机的概念模型里[1],字节码解释器工作时就是通过改变这个计数器 的值来选取下一条需要执行的字节码指令,它是程序控 阅读全文
摘要:
一、spring事务的原理? 首先,我们先明白spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。 那么,我们一般使用JDBC操作事务的时候,代码如下 (1)获取连接 Connection con = DriverManager.getConne 阅读全文