July 30, 2017

IDEA搭建Zookeeper源码阅读环境

Zookeeper是当前业界最广泛使用的一个分布式协调组件,能够实现诸如统一命名服务、状态同步服务、集群管理、分布式锁、分布式应用配置项的管理等等功能。

工作中经常用到Zookeeper,作为一个充满好奇心的程序猿,决定来研究研究Zookeeper的源代码,第一步要做的事情就是在IDE里面搭建好源码阅读环境。但是当把源码clone到本地用IDEA打开的时候发现到处都是飘红,各种问题。后来查了下,发现Zookeeper居然还是使用Ant管理项目,用Ivy下载依赖,没办法直接用IDEA打开。

那么应该怎么解决呢?简单。既然IDEA不能直接打开,那么我们可以手动拷贝源代码。

方法

先手动把......

July 11, 2017

Zookeeper学习笔记

在Zookeeper中,事务是指能够改变Zookeeper服务器状态的操作,称之为事务操作或者更新操作,一般包括数据节点的创建与删除、数据节点内容更新和客户端会话创建与失效等操作。

临时节点是在客户端会话失效,而非TCP链接断开的时候会被自动清除。

Zookeeper规定临时节点不能创建子节点。也就是说临时节点只能是叶子节点。

Zookeeper中每个数据节点除了存储数据内容外,还会存储数据节点本身的一些状态信息。

Stat结构字段和说明如下

状态属性

说明

czxid

Created ZXID,表示该数据节点被创建时候的事务ID

mzxid

Modified ZXID,表示该......

June 26, 2017

Netty中的一些小问题

关于isActive()方法:

isActive()这个方法在整个流程中都会用到,用来判断对应的链路是否激活。定义如下:

/**

* Return {@code true} if the {@link Channel} is active and so connected.

*/

boolean isActive();

Server端:

Server端的实现在NioServerSocketChannel.java中,实现如下:

@Override

public boolean isActive() {

return javaChannel().socket().isBo......

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> ......