package com.alibaba.otter.canal.parse.helper;
/**
* 用于检查超时, 主要用于启动服务以后,如果在指定的时间内没有响应,则自动退出
*
* @author: yuanzu Date: 12-9-26 Time: 上午10:55
*/
public class TimeoutChecker {
/**
* 最后一次动作的时间
*/
private long lastTouch;
/**
* 超时时间
*/
private long timeoutMillis;
/**
* 运行标志
*/
private boolean running = true;
/**
* default 3s
*/
private static final long DEFAULT_TIMEOUT_MILLIS = 3 * 1000;
public TimeoutChecker(long timeoutMillis){
this.timeoutMillis = timeoutMillis;
touch();
}
public TimeoutChecker(){
this(DEFAULT_TIMEOUT_MILLIS);
}
/**
* 更新
*/
public void touch() {
this.lastTouch = System.currentTimeMillis();
}
/**
* 等待空闲
*
* @throws InterruptedException
*/
public void waitForIdle() throws InterruptedException {
while (this.running && (System.currentTimeMillis() - this.lastTouch) < this.timeoutMillis) {
Thread.sleep(50);
}
}
public void stop() {
this.running = false;
}
}