Timeout.java 1.42 KB
package com.yanzuoguang.log;

/**
 * 超时对象
 *
 * @param <T> 数据类型
 * @author 颜佐光
 */
public class Timeout<T> {

    /**
     * 开始时间
     */
    private final long start;

    /**
     * 上次通知时间
     */
    private long prev;

    /**
     * 结束时间
     */
    private final T data;

    /**
     * 构造函数
     *
     * @param data 数据
     */
    public Timeout(T data) {
        this.start = System.currentTimeMillis();
        this.prev = 0;
        this.data = data;
    }

    /**
     * 开始时间
     *
     * @return 获取开始时间
     */
    public long getStart() {
        return start;
    }

    /**
     * 数据
     *
     * @return 获取结束时间
     */
    public T getData() {
        return data;
    }

    /**
     * 是否达到最大时间
     *
     * @param maxTime     最大时间
     * @param prevMaxTime 上次最大时间
     * @return 是否达到最大时间
     */
    public boolean isMaxTime(long maxTime, long prevMaxTime) {
        long now = System.currentTimeMillis();
        long time = now - start;
        if (maxTime >= time) {
            return false;
        }
        long prevTime = now - prev;
        // System.out.println(String.format("now %d time %d prev %d prevTime %d ", now, time, prev, prevTime))
        boolean ret = prevTime > prevMaxTime;
        if (ret) {
            this.prev = now;
        }
        return ret;
    }
}