- 博客(4)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 单例设计模式
单例设计模式 饿汉式单例 饿汉式单例是在类加载的时候就立即初始化,并且创建单例对象。绝对线程安全,在线 程还没出现以前就是实例化了,不可能存在访问安全问题。 优点:没有加任何的锁、执行效率比较高,在用户体验上来说,比懒汉式更好,绝对线程安全,在线程还没出现以前就是实例化了,不可能存在访问安全问题 缺点:类加载的时候就初始化,不管用与不用都占着空间,浪费了内存,有可能占着茅 坑不拉屎。 普通饿汉式单例 public class HungrySingleton { private static fi
2020-12-19 10:47:26
65
1
原创 ReentrantLock 的源码分析
ReentrantLock 的源码分析 ReentrantLock 的时序图 ReentrantLock.lock() 这个是 reentrantLock 获取锁的入口 public void lock() { sync.lock(); } sync 实际上是一个抽象的静态内部类,它继承了 AQS 来实现重入锁的逻辑,而 AQS 是一个同步队列,它能够实现线程的阻塞以及唤醒,但它并不具备业务功能。 sync的实现类 所以在不同的同步场景中,会继承 AQS 来实现对应场景的功能 Sync 有两个具体
2020-12-22 21:27:57
72
原创 2020-12-21
synchronized 锁的升级 在 synchronized 中,锁存在四种状态 分别是:无锁、偏向锁、轻量级锁、重量级锁; 锁的状态 根据竞争激烈的程度从低到高不断升级。 偏向锁 偏向锁的目的是在某个线程获得锁之后,消除这个线程锁重入(CAS)的开销,偏向锁则是在只有一个线程执行同步块时进 一步提高性能。 轻量级锁 轻量级锁所适应的场景是线程交替执行同步块的情况,如果存在同一时间访问同一锁的情况,就会导致轻量级锁膨胀 为重量级锁。 轻量级锁是为了在线程交替执行同步块时提高性能。 重
2020-12-21 21:59:50
66
原创 ratf选举算法
raft选举算法 Nacos集群采用raft算法来实现 raft算法演示地址:http://thesecretlivesofdata.com/raft/ 节点角色 Leader:负责接收客户端的请求,与Follower保持这heartBeat的联系; Candidate:用于选举Leader的一种角色 Follower:负责响应来自Leader或者Candidate的请求,把请求到Follower的事务转发给Leader; 发生选举的时机 服务启动的时候 leader挂了的时候 选举过程 所有节点
2020-11-05 09:01:19
925
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人