ZooKeeper(java api watch)

package com.sw;

import java.io.IOException;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooKeeper;

public class WatchClient implements Watcher, Runnable{
private static final Logger logger = Logger.getLogger(WatchClient.class);

    public static final String PATH = "/root";// 所要监控的结点
    private static ZooKeeper zk;
    private static List<String> nodeList;// 所要监控的结点的子结点列表

public static void main(String[] args) throws Exception {
        WatchClient client = new WatchClient();
        Thread th = new Thread(client);
        th.start();
    }

public void run() {
   try {
      zk = new ZooKeeper("ip:4181", 21810,this);

/**
        * 持续监控PATH下的结点
        */
       while (true) {
           try {
               zk.exists(PATH, this);//所要监控的主结点
               nodeList = zk.getChildren(PATH, this);

               System.err.println(nodeList);

               zk.exists(PATH , this);

               Thread.sleep(1000);// sleep一会,减少CUP占用率

           } catch (KeeperException | InterruptedException e) {
   	logger.warn(e.getMessage());
           }
       }

} catch (IOException e) {
logger.warn(e.getMessage());
}

}

public void process(WatchedEvent event) {
        System.err.println(event.getType());
        String path = event.getPath();
        if(path==null){
        return ;
        }

        // 结点数据改变之前的结点列表
        List<String> nodeListBefore = nodeList;
        // 主结点的数据发生改变时
        if (event.getType() == EventType.NodeDataChanged) {
        logger.info("Node data changed:" + path);
        }
        if (event.getType() == EventType.NodeDeleted){
        logger.info("Node deleted:" + path);
        }
        if(event.getType()== EventType.NodeCreated){
        logger.info("Node created:"+path);
        }

        // 获取更新后的nodelist
        try {
            nodeList = zk.getChildren(path, false);
        } catch (KeeperException e) {
            System.out.println(path+" has no child, deleted.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        List<String> nodeListNow = nodeList;
        // 增加结点
        if (nodeListBefore.size() < nodeListNow.size()) {
            for (String str : nodeListNow) {
                if (!nodeListBefore.contains(str)) {
                logger.info("Node created:" + path + "/" + str);
                }
            }
        }
}

}