09 2022 档案
摘要:概述 1、Redis 事务是一个单独的隔离操作 (1)事务中的所有命令都会序列化、按顺序地执行 (2)事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 2、主要作用:串联多个命令,防止别的命令插队 3、使用乐观锁(CAS)实现 Multi、Exec、Discard 1、从输入 Multi
阅读全文
摘要:Bitmaps 1、不是一种数据类型, 实际上是字符串(key-value),但可以对字符串的位进行操作 2、Bitmaps 单独提供一套命令,所以在 Redis 中使用 Bitmaps,和使用字符串的方法不太相同 3、可以把 Bitmaps 类比为一个以 bit 为单位的数组 (1)数组的每个单元
阅读全文
摘要:概述 1、Redis 发布 / 订阅是一种消息通信模式 (1)发送者 (publish) 发送消息 (2)订阅者 (subscribe)接收消息 2、Redis 客户端可以订阅任意数量的频道 PUBLISH channel message 1、将信息 message 发送到指定的频道 channel
阅读全文
摘要:Units 单位 1、配置大小单位 2、定义一些基本度量单位,只支持 bytes,不支持 bit 3、大小写不敏感 INCLUDES 1、可以包含其他配置文件 2、多实例的情况,可以把公用的配置文件提取出来 NETWORK 1、bind bind 127.0.0.1 -::1 (1)默认在回环的 I
阅读全文
摘要:Redis 键(key) 1、查看当前库所有 key keys * 2、判断某个 key 是否存在 exists <key> (1)若存在,则返回 1 (2)若不存在,则返回 0 3、返回 key 所存储 value 的数据结构类型 type <key> (1)如果 key 不存在时,返回 none
阅读全文
摘要:NoSQL 1、Not Only SQL 2、泛指非关系型的数据库 3、不依赖业务逻辑方式存储,而以简单的 key-value 模式存储,因此大大的增加数据库的扩展能力 (1)不遵循 SQL 标准 (2)不支持 ACID (3)远超于 SQL 性能 4、应用场景 (1)数据高并发的读写 (2)海量数
阅读全文
摘要:概述 1、用于异步编程,非阻塞 (1)使得任务单独运行在与主线程分离的其他线程中 (2)通过回调,可以在主线程中得到异步任务的执行状态,是否完成,是否异常等信息 2、实现 Future、CompletionStage 接口 (1)实现 Future 接口:兼容现在有线程池框架 (2)实现 Compl
阅读全文
摘要:早期线程安全集合类 1、如:Hashtable、Vector 2、所有方法都使用 synchronized,确保线程安全 3、性能差,不建议使用 Collections 1、使用 Collections 装饰的线程安全集合 (1)Collections.synchronizedCollection
阅读全文
摘要:Semaphore 1、信号量 2、限制能同时访问共享资源的线程上限 3、应用:限流 (1)使用 Semaphore 限流,在访问高峰期时,让请求线程阻塞,渡过高峰期再释放许可 (2)只限于单机,不适合分布式 (3)只限制线程数,而不是限制资源数 (4)适用于线程数、数据库连接数是相等的,即一个线程
阅读全文
摘要:读写锁 1、JUC 提供两种实现 (1)ReentrantReadWriteLock (2)StampedLock 2、当读操作远远高于写操作时,使用读写锁,读-读可以并发,提高性能 3、类似于数据库中的 select ... from ... lock in share mode 4、提供一个数据
阅读全文
摘要:ReentrantLock 1、实现 Lock 接口 public class ReentrantLock implements Lock, java.io.Serializable 2、内部维护 Sync private final Sync sync; 3、Sync 继承 AbstractQue
阅读全文
摘要:AQS 原理 1、AbstractQueuedSynchronizer 2、阻塞式锁、相关的同步器工具的框架 3、state 属性表示资源的状态 (1)子类需要定义如何维护这个状态,控制如何获取锁、释放锁 (2)getState:获取 state 状态 (3)setState:设置 state 状态
阅读全文
摘要:ForkJoinPool 1、JDK 1.7 加入的新的线程池实现,Fork / Join 框架的实现 2、体现分治思想,适用于能够进行任务拆分的 CPU 密集型运算 (1)任务拆分:将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解 (2)在分治的基础上加入多线程,把每个任务的分解、合
阅读全文
摘要:BlockingQueue 1、通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出 (1)当队列是空的,从队列中获取元素的操作将会被阻塞 (2)当队列是满的,从队列中添加元素的操作将会被阻塞 (3)试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素 (3)试图
阅读全文
摘要:1、线程池状态 (1)ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量 状态名 高 3 位 接收新任务 处理阻塞队列任务 说明 RUNNING 111 Y Y SHUTDOWN 000 N Y 不会接收新任务,但会处理阻塞队列剩余任务 STO
阅读全文
摘要:Java 运行时存储空间 1、可以分为:栈区、堆区、方法区(非堆空间) 2、栈空间 (1)Stack Space (2)为线程的执行准备一段固定大小的存储空间,每个线程都有独立的线程栈空间,创建线程时就为线程分配栈空间 (3)在线程栈中每调用一个方法,就给方法分配一个栈帧 (4)栈帧用于存储方法的局
阅读全文
摘要:线程组 1、管理线程 (1)在线程组中定义一组相似(相关)线程 (2)在线程组中也可以定义子线程组 2、Thread 类的构造方法允许在创建线程时指定线程组 (1)如果在创建线程时,没有指定线程组,则该线程就属于父线程所在的线程组 (2)JVM 在创建 main 线程时,会为它指定一个线程组,因此每
阅读全文
摘要:不可变 1、如果一个对象在不能够修改其内部状态(属性),那么它就是线程安全的,因为不存在并发修改 2、例 (1)String 类 (2)DateTimeFormatter 类 3、使用 final 修饰类、及类中属性 (1)属性用 final 修饰,保证该属性是只读的,不能修改 (2)类用 fina
阅读全文
摘要:CAS 1、Compare and Swap / Compare And Set 2、底层:lock cmpxchg 指令(X86 架构) (1)在单核 CPU、多核 CPU 下,都能够保证 CAS 的原子性 (2)在多核状态下,某个核执行到带 lock 的指令时,CPU 会锁住总线,当这个核把此指
阅读全文
摘要:Java 内存模型 1、JMM:Java Memory Model 2、定义主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等 3、JMM 体现 (1)原子性:保证指令不会受到线程上下文切换的影响 (2)可见性:保证指令不会受 CPU 缓存的影响 (3)有序性:保
阅读全文
摘要:管程 1、Monitor 2、保证同一时刻,只有一个进程在管程内活动,即管程内定义的操作在同一时刻,只被一个进程调用(由编译器实现),但不能保证进程以设计的顺序执行 3、JVM 中同步是基于进入、退出管程对象实现 (1)每个对象都会有一个管程对象 (2)管程随着 Java 对象一同创建、销毁 4、执
阅读全文
摘要:创建、运行线程 1、直接使用 Thread //创建线程对象 Thread t = new Thread() { public void run() { //执行任务 } }; //启动线程 t.start(); //构造方法的参数,指定线程名字(建议) Thread t1 = new Thread
阅读全文
摘要:进程 1、程序由指令、数据组成,但指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存 (1)在指令运行过程中,需要用到磁盘、网络等设备 (2)进程用来加载指令、管理内存、管理 IO 2、当一个程序被运行,从磁盘加载程序代码至内存,此时开启一个进程 3、进程可以视为程序的一个实例 (1
阅读全文
摘要:Java 内存模型 1、Java Memory Model(JMM) 2、JMM 在多线程读写共享数据(成员变量、数组)时,定义一套对数据的可见性、有序性、原子性的规则和保障 (1)原子性:保证指令不会受到线程上下文切换的影响 (2)可见性:保证指令不会受 CPU 缓存的影响 (3)有序性:保证指令
阅读全文
摘要:类文件结构 //魔数 u4 magic; //次要版本 u2 minor_version; //主要版本 u2 major_version; //常量池信息 u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; /
阅读全文
摘要:判断对象存活一般有两种方式 1、引用计数算法 2、可达性分析算法:JVM 使用 引用计数算法(Reference Counting) 1、对每个对象保存一个整型的引用计数器属性,用于记录对象被引用情况 (1)对于一个对象 A,只要有任何一个对象引用 A,则 A 的引用计数器就加 1;当引用失效时,引
阅读全文
摘要:程序计数器 1、Program Counter Register:程序计数器(寄存器) (1)程序计数器是 Java 对物理硬件的屏蔽与抽象 (2)物理上,通过寄存器实现程序计数器 2、作用:记录下一条 JVM 指令的执行地址 (1)解释器会解释指令为机器码,交给 CPU 执行,程序计数器记录下一条
阅读全文