File tree Expand file tree Collapse file tree 2 files changed +45
-2
lines changed Expand file tree Collapse file tree 2 files changed +45
-2
lines changed Original file line number Diff line number Diff line change @@ -40,6 +40,41 @@ notifyAll:唤醒等待队列中等待该对象锁的全部线程,让其竞
4040
4141** 我们写同步的时候,优先考虑synchronized,如果有特殊需要,再进一步优化。ReentrantLock和Atomic如果用的不好,不仅不能提高性能,还可能带来灾难。**
4242
43+ #### 锁的种类
44+ * 公平锁/非公平锁
45+
46+ 公平锁是指多个线程按照申请锁的顺序来获取锁
47+ ReentrantLock通过构造函数指定该锁是否是公平锁,默认是非公平锁。Synchronized是一种非公平锁
48+
49+ * 可重入锁
50+
51+ 指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁
52+ ReentrantLock, 他的名字就可以看出是一个可重入锁,其名字是Re entrant Lock重新进入锁
53+ Synchronized,也是一个可重入锁。可重入锁的一个好处是可一定程度避免死锁
54+
55+ * 独享锁/共享锁
56+
57+ 独享锁是指该锁一次只能被一个线程所持有。共享锁是指该锁可被多个线程所持有
58+ ReentrantLock是独享锁。但是对于Lock的另一个实现类ReadWriteLock,其读锁是共享锁,其写锁是独享锁
59+ 读锁的共享锁可保证并发读是非常高效的,读写,写读 ,写写的过程是互斥的
60+ Synchronized是独享锁
61+
62+ * 乐观锁/悲观锁
63+
64+ 悲观锁在Java中的使用,就是各种锁
65+ 乐观锁在Java中的使用,是CAS算法,典型的例子就是原子类,通过CAS自旋实现原子操作的更新
66+
67+ * 偏向锁/轻量级锁/重量级锁
68+
69+ 针对Synchronized的锁状态:
70+ 偏向锁是为了减少无竞争且只有一个线程使用锁的情况下,使用轻量级锁产生的性能消耗。指一段同步代码一直被一个线程所访问,在无竞争情况下把整个同步都消除掉
71+ 轻量级锁是为了减少无实际竞争情况下,使用重量级锁产生的性能消耗。指当锁是偏向锁的时候,被另一个线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过CAS自旋的形式尝试获取锁,不会阻塞
72+ 重量级锁是指当锁为轻量级锁的时候,另一个线程虽然是自旋,但自旋不会一直持续下去,当自旋一定次数的时候,还没有获取到锁,就会进入阻塞,该锁膨胀为重量级锁
73+
74+ * 自旋锁/自适应自旋锁
75+ 指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU,默认自旋次数为10
76+ 自适应自旋锁的自旋次数不再固定,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态决定,是虚拟机对锁状况的一个预测
77+
4378### volatile
4479功能:
4580
Original file line number Diff line number Diff line change @@ -30,9 +30,17 @@ Spring是个包含一系列功能的合集,如快速开发的Spring Boot,支
3030
3131
3232### IOC(DI)
33- 控制反转:原来是自己主动去new一个对象去用,现在是由容器工具配置文件创建实例让自己用,以前是自己去找妹子亲近,现在是有中介帮你找妹子,让你去挑选,说白了就是用面向接口编程和配置文件减少对象间的耦合,同时解决硬编码的问题(XML)
33+ * 控制反转
3434
35- 依赖注入:在运行过程中当你需要这个对象才给你实例化并注入其中,不需要管什么时候注入的,只需要写好成员变量和set方法
35+ 由 Spring IOC 容器来负责对象的生命周期和对象之间的关系。IoC 容器控制对象的创建,依赖对象的获取被反转了
36+ 没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转
37+
38+ * 依赖注入
39+
40+ 组件之间依赖关系由容器在运行期决定,由容器动态的将某个依赖关系注入到组件之中,提升组件重用的频率、灵活、可扩展
41+ 通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现
42+
43+ 注入方式:构造器注入、setter 方法注入、接口方式注入
3644
3745### Spring AOP
3846#### 介绍
You can’t perform that action at this time.
0 commit comments