近况

redis小技巧

2018-12-21

使用redis做分布式锁 setnx来争抢锁,拿到锁之后,用expire给锁加一个过期时间 上面这种做法,如果setnx拿到锁之后,expire之前,进程意外挂了,就会导致锁得...


实现一个基本的rpc功能

2018-12-21

什么是rpc rpc即远程过程调用(Remote Procedure Call), 现在很多公司的项目主要是微服务化的,不同的服务会放到不同的服务器,它们之间会相互调用。比如。我...


zookeeper学习之zab协议

2018-11-10

zookeeper采用一种称为ZooKeeper Atomic Broadcast(ZAB,ZooKeeper原子广播协议)的协议作为其数据一致性的核心算法。 接下来我们就介绍一下zab协议 zab zab...


2PC 与 3PC

2018-11-07

2PC 二阶段提交协议 阶段一: 提交事务请求 1. 先向所有的人发送事务请求,询问是否可以提交事务 2. 参与节点执行, 并写入Undo Redo信息 3. 各个参与节点如果成...


拜占庭将军问题与Raft算法

2018-11-07

拜占庭将军问题 莱斯利·兰波特在其论文中描述了如下问题: 一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进...


ThreadLocalMap 源码解析

2018-09-05

什么是ThreadLocal? ThreadLocal类顾名思义可以理解为线程本地变量。也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互...


AQS acquire方法解析

2018-08-09

AQS(AbstractQueuedSynchronized)是java.util.concurrent.locks的重要组成部分,我们现在来分析一下它的实现 定义 private transient volanitialized. Modi...


线程池

2018-08-08

1 线程池的技术背景 在面向对象编程中, 创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其他更多资源,所以提高服务程序效率的一个手段就...