Java并发编程(三)-锁
参考文献
锁的简单应用
图解Java中那18 把锁
<<Java并发编程艺术>>
Synchronization
锁
锁的分类
分类标准把锁分为以下 7 大类别
偏向锁/轻量级锁/重量级锁;
可重入锁/非可重入锁;
共享锁/独占锁;
公平锁/非公平锁;
悲观锁/乐观锁;
自旋锁/非自旋锁;
可中断锁/不可中断锁.
使用锁的目的
锁是用来控制多个线程访问共享资源的方式.一个锁能够防止多个线程同时访问共享资源.
死锁
产生死锁的原因
当前线程拥有其他线程需要的资源,当前线程等待其他线程已拥有的资源,同时不放弃自己拥有的资源;
如何预防死锁
只有以下这四个条件都发生时才会出现死锁:
互斥:共享资源X和Y只能被一个线程占用;
占有且等待: 线程T1已取得共享资源X,在等待共享资源Y的时候,不释放共享资源X;
不可抢占: 其他线程不能强行抢占线程T1占有的资源;
循环等待: 线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源,就是循环等待.
即破坏其中一个,就可以成功避免死锁的发生
对于"占用且等待"这个条件 ...
Java并发编程(二)-线程
参考文献
<<Java并发编程艺术>>
<<深入理解Java虚拟机-JVM高级特性与最佳实践>>
线程
线程的创建和运行
直接使用Thread
1Thread t= new Thread(()->{}).start();
Runnable配合Thread
123Runnable runnable = () -> log.debug("hellow");Thread t = new Thread(runnable);t.start;
实现Callable接口通过FutureTask包装器来创建Thread线程;
12345678// FutureTask能接收Callable类型的参数,用来处理返回结果FutureTask<String> task = new FutureTask<>(()->{ log.debug("hello"); return "demo";})new Thr ...
Java并发编程(一)-并发相关知识点
参考文献
并发与并行的区别是什么?
<<Java并发编程实战>>
极客时间:Java并发编程实战
必懂系列!Java并发面试题
【对线面试官】多线程基础
<<Java并发编程艺术>>
Java 并发 - 理论基础
ON JAVA 进阶卷
进程之间通信的方式
RPC/HTTP/信号量/消息队列/管道/socket
并发编程中核心的问题
分工: 如何高效地拆解任务并分配给线程
Java SDK Fork/Join框架就是一种分工模式
同步: 指线程之间如何协作
CountDownLatch就是一种典型的同步方式
互斥: 保证同一时刻只允许一个线程访问共享资源
可重入锁则是一种互斥手段
同步
并发编程领域的同步主要指线程之间的协作,指一个线程执行完了一个任务,如何通知后续任务的线程开工
工作中遇到的线程协作问题,基本上都可以描述为这样一个问题:
当某个条件不满足时,线程需要等待;
当某个条件满足时,线程需要被唤醒执行;
解决协作问题的核心技术是"管程"
互斥
实现互斥的核心技术是锁 ...
Linux-ssh
参考文献
如何愉快地将 linux 作为开发环境: ssh 隧道
如何配置SSH别名
SSH
12345678910ssh [options] [user@]host [command]usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port ...
SpringBoot-注解@ConfigurationProperties
参考文献
@ConfigurationProperties注意点
@ConfigurationProperties
@ConfigurationProperties 通过setter和构造器来设置field的值, 并且支持级联绑定属性
配置文件中的属性个数可以和POJO中的field个数不一样, 如果这样那么field就使用默认值或是初始值
要想使@ConfigurationProperties生效, 可以通过@Component, 或是在配置类上使用@EnableConfigurationProperties, 并且指定value来使properties文件的值自动注入到对应pojo的属性中(同时会将该POJO注入到IoC)
@ConfigurationProperties 不能与@EnableConfigurationProperties 一起标注在同一个类上
可以在@ConfigurationProperties标注的类上使用@Validated在来校验field的绑定
如果一个类标明了@ConfigurationProperties, 不会对内部类生效, 需要另外配置(因 ...
MySQL(二十三)-加锁分析实战
参考文献
解决死锁之路 - 常见 SQL 语句的加锁分析
何登成–管中窥豹——MySQL(InnoDB)死锁分析之道
MySQL · 引擎特性 · InnoDB隐式锁功能解析
Locks Set by Different SQL Statements in InnoDB
MySQL技术内幕 InnoDB存储引擎
27.12.13.1 The data_locks Table
MySQL InnoDB锁介绍及不同SQL语句分别加什么样的锁
一张图彻底搞懂 MySQL 的锁机制
mysql事务和锁 SELECT FOR UPDATE
MySQL锁总结
MySQL DELETE 删除语句加锁分析
加锁实战分析
对于唯一键值的锁定,Next-Key Lock降级为Record Lock仅存在于查询所有的唯一索引列.若唯一索引由多个列组成,而查询仅是查找多个唯一索引列中的其中一个,那么查询其实是range类型,而不是point类型,因此InnoDB存储引擎依然会使用Next-Key Lock进行锁定.
操作序号
SessionA
SessionB
1
begin;
2 ...
InnoDB(七)-锁
参考文献
MySQL技术内幕 InnoDB存储引擎
https://dev.mysql.com/doc/refman/8.0/en/show-engine.html
锁
lock与latch
latch一般称为闩锁(轻量级的锁),因为其要求锁定的时间必须非常短.若持续的时间长,则应用的性能会非常差.在InnoDB存储引擎中,latch又可以分为mutex(互斥量)和rwlock(读写锁).其目的是用来保证线程操作临界资源的正确性,并且通常没有死锁检测的机制.
lock的对象是事务,用来锁定的是数据库中的对象,如表,页,行.并且一般lock的对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同).lock在大多数数据库中一样,有死锁机制.
lock与latch不同点
lock
latch
对象
事务
线程
保护
数据库内容
内存数据结构
持续时间
整个事务过程
临界资源
模式
行锁,表锁,意向锁
读写锁,互斥量
死锁
通过waits-for graph,time out等机制进行死锁检测
无死锁检测与处理 ...
SpringBoot-文件上传与下载
参考文献
大文件上传下载实现思路,分片、断点续传代码实现,以及webUpload组件
FileUpload
Web Uploader
准备工作
前端
WebUploader
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。
采用大文件分片并发上传,极大的提高了文件上传效率。
需要下载WebUploader包
后端
SpringBoot 2.5.6
123456789101112131415161718192021222324252627<properties> <java.version>1.8</java.version> <commons.fileupload.version>1.4</commons.fileupl ...
关系代数
参考文献
关系代数的基本运算
SQL 与关系代数
关系代数
关系代数的运算符
集合运算符
运算符
含义
英文
∪\cup∪
并
Union
−−−
差
Difference
∩\cap∩
交
Intersection
×\times×
笛卡尔积
Cartesian Product
比较运算符
运算符
含义
>
大于
≥
大于等于
<
小于
≤
小于等于
=
等于
≠
不等于
专门的关系运算符
运算符
含义
英文
σ\sigmaσ
选择
Selection
∏\prod∏
投影
Projection
⋈\Join⋈
链接
Join
÷\div÷
除
Division
逻辑运算符
运算符
含义
∧\wedge∧
与
∨\vee∨
或
¬\neg¬
非
五种基本的关系代数运算
并(Union)
关系R与S具有相同的关系模式,即R与S的结构相同,R与S的并属于R或属于S的元组构成的集合,记作R∪SR\cup SR∪S,定义如下R∪S={t∣t∈R ...
数据公式
参考文献
欧几里得距离
欧几里得距离(Euclidean distance),也称为直线距离、L2距离,是两个点之间的直线距离,是空间中两点之间的最短路径长度。
对于在二维平面上的两个点P1(x1,y1)(x1,y1)(x1,y1)和P2(x2,y2)(x2,y2)(x2,y2),欧几里得距离的计算公式是:
distance=(x2−x1)2+(y2−y1)2distance=\sqrt{(x2-x1)^{2}+(y2-y1)^{2}}
distance=(x2−x1)2+(y2−y1)2
对于在三维空间中的两个点 P1(x1,y1,z1)(x1, y1, z1)(x1,y1,z1) 和 P2(x2,y2,z2)(x2, y2, z2)(x2,y2,z2),欧几里得距离的计算公式是:
distance=(x2−x1)2+(y2−y1)2+(z2−z1)2distance=\sqrt{(x2-x1)^{2}+(y2-y1)^{2}+(z2-z1)^{2}}
distance=(x2−x1)2+(y2−y1)2+(z2−z1)2
曼哈顿距离(Manhattan dist ...