June 08, 2017

Redis源码学习之复制

占坑,有时间再整理

June 04, 2017

深入学习FutureTask

第一部分:What

在Java中一般通过继承Thread类或者实现Runnable接口这两种方式来创建多线程,但是这两种方式都有个缺陷,就是不能在执行完成后获取执行的结果,因此Java 1.5之后提供了Callable和Future接口,通过它们就可以在任务执行完毕之后得到任务的执行结果。本文会简要的介绍使用方法,然后会从源代码角度分析下具体的实现原理。

本文以Java 1.7的代码进行分析。

第二部分:How

Callable接口

对于需要执行的任务需要实现Callable接口,Callable接口定义如下:

public interface Callable<V> ......

May 30, 2017

Redis源码学习之Redis事务

Redis作为一个内存型数据库,同样支持传统数据库的事务特性。这篇文章会从源代码角度来分析Redis中事务的实现原理。

What

Redis事务提供了一种将多个命令请求打包,然后一次性、按照顺序地执行多个命令的机制,并且在事务执行的期间,服务器不会中断事务而去执行其他不在事务中的命令请求,它会把事务中所有的命令都执行完毕才会去执行其他的命令。

How

Redis中提供了multi、discard、exec、watch、unwatch这几个命令来实现事务的功能。

Redis的事务始于multi命令,之后跟着要在事务中执行的命令,终于exec命令或者discard命令。加入事务中的所有命令......

May 30, 2017

Bootstrap源码分析

不管是客户端使用的Bootstrap还是服务端使用的ServerBootstrap都是继承自AbstractBootstrap,AbstractBootstrap的定义如下

public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable {

}

从定义中可见AbstracpBootstrap实现了Cloneable接口,能够进行复制。

Server端:ServeBootstrap

正如前文介绍的......