当前位置:文档之家› JAVA知识梳理

JAVA知识梳理

低竞争的情况下, 性能比renntrantLock要好 缺点
高竞争的情况下, 性能下降比较快
多线程
AQS(AbstractQuenedSynchronizer)
构建同步锁的框架
JUC
CountDo wnLatch
CyclicBar rier
Semapho r
阻塞当前线程,等所有的线程都处理后, 在运行
数据库
innoDb
优点
索引组织 表
存储方式
索引使用 的是B+树
优点
支持事 务
行级锁
存储方式
共享表空间存储
所有表的数据文件和索引文件都保存在 一个表空间里,一个表空间可以有多个文 件,通过innodb_data_file_path和 innodb_data_home_dir参数设置共享 表空间的位置和名字,一般共享表空间的 名字叫ibdata1-n。
核心参数
keepAliveTime
非核心线程能够空闲的最长时间,超过时间,线程终止。这个参数默认只 有在线程数量超过核心线程池大小时才会起作用。只要线程数量不超过核 心线程大小,就不会起作用。
核心参数
unit
时间单位:与keepAliveTime配合使用
核心参数
workQueue
缓存队列,用来存放等待被执行的任务。
dExecutor
0 2
FixedThread
Pool
0 3
CachedThre
adPool
0 4
ScheduledT
hreadPool
0 5
核心参数
SingleThreadEx ecutor
这个线程池只有一个核心线程 在 工 作 ,也 就 是 相 当 于 单 线 程 串 行 执 行 所 有 任 务 。如 果 这 个 唯 一 的 线 程 因 为 异 常 结 束 ,那 么会有一个新的线程来替代它。 此线程池保证所有任务的执行 顺序按照任务的提交顺序执行
JAVA知识梳理
演讲人
2 0 2 5 - 11 - 11
01
多线程
多线程
线程池 volatile作用
ReentrantLock与 Synchronized
AQS(AbstractQue nedSynchronizer)
CAS(CompareAnd-Swap)
多线程
线程池
0 1
SingleThrea
threadFactor y
线程工厂,用来创建线程, 一般有三种选择策略。
ArrayBlockingQueue; LinkedBlockingQueue; SynchronousQueue;
多线程
volatile 其它线程立即可见
02 禁止指令重排
多线程
数据库
事务
A
原子 性
B
持久 性
C
一致 性
D
隔离 性
事务隔离
未授权读取,也称脏读,在数据修改的时候允许读取 授权读取,也称提交后读取 可重复读取:禁止不可重复读取和脏读取,但是有时可能出现幻读数据。读取数据的事务将会禁止写事务 (但允许读事务),写事务则禁止任何其他事务。可以通过“共享读锁”和“排他写锁”实现。 序列化:提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。 仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操 作的事务访问到。 幻读 不可重复
ReentrantLock与Synchronized
特点:要么不占, 要么独占
reentrant Lock
缺点 不可以自动释放锁,需
要手动unlock
优点 等待可中断
超时直接返回 可判断是否有其他线程等 待该锁 可实现公平锁 高竞争的情况下, 性能维 持常态
synchronized
优点 JVM底层实现, 异常可自动释放锁
循环栅栏:主要调用await方法,每调用一 次减一, 计数为0的时候, 解除阻塞;
限制同一时间,访问资源的线程数量; aquire 获取许可, release 释放许可
02
数据库
数据库
0 1
最左侧原则
0 4
innoDb
0
0
2
3
簇拥索引与非 簇拥索引
索引
0
0
5
6
MyISAM
事务
数据库
设计范 式
持久层
CachedThread Pool
无边界线程池, 会回收空闲的的 线程, 任务增加时也会新建线程 (数量由JVM指定),通常用于 短任务
ScheduledThreadPool
核心线程池固定,大小无限的线程池。
核心参数
corePoolSize
核心线程数
核心参数
maximunPoolSize
线程池能创建的最大数量,如果核心线程池和缓存队列都已经满了,新的任务进来就会创建新 的线程来执行。但是数量不能超过maximunPoolSize,否侧会采取拒绝接受任务策略,我 们下面会具体分析。
FixedThreadPool
固定线程池:只 有 核 心 线 程 。 每 次 提 交 一 个 任 务 就 创 建 一 个 线 程 ,直 到 线 程 达 到 线 程 池 的 最 大 大 小 。线 程 池 的 大 小 一 旦 达 到 最 大 值 就 会 保 持 不 变 ,如 果 某 个 线 程 因 为 执 行 异 常 而 结 束 ,那 么 线 程 池 会 补 充 一 个 新 线 程 。
多表空间存储
以表名为文件名称存储
数据库
MyISAM
优点
缺点
堆表
优点
支持 FULLTEXT 类型的全文索引
缺点
不支持外键
不支持事务
不支持行级 锁(只支持表 级锁)
堆表
在磁盘存储上有三个文件,每个文件名以表名开头,扩展名指出文件类 型
.frm 用于存 储表的定义
.MYD 用于存 放数据
.MYI 用于存 放表索引
Btree索引
B树 叶子节点存储多个元素(包含
key和value) B+树
叶子节点只存key, 非叶子节点 存储值;
有序数组
有序数组在等值查询和范围查询场景中的性能都非常优秀。用二分法 就可以快速找到(时间复杂度为O(logN))。但是如果要往中间插入 一条数据,则必须挪动后面的所有记录,成本较高。因此,有序数组 只适用于静态存储引擎,即数据表一旦建立后不再会修改。
数据库
最左侧原则
针对复合索引,先使用复合索引最 前面的索引(精确查找),直到范 围查找
数据库
簇拥索引与非簇拥索引
01
簇拥索引:数据和索引放在一 起
02
非簇拥索引:数据与索引分开 放
01
hash 索引
数据库
索引
02
Btree 索引
03
有序数 组
hash索引
对于哈希索引来说,底层的数据 结构就是哈希表,因此在绝大多 数需求为单条记录查询的时候, 可以选择哈希索引,查询性能最 快;其余大部分场景,建议选择 BTree索引;
相关主题