/** * @param task * @param delay A delay in addition to the default duration of the timeout */ public void schedule(Task task, long delay) { synchronized (_lock) { if (task._timestamp != 0) { task.unlink(); task._timestamp = 0; } task._timeout = this; task._expired = false; task._delay = delay; task._timestamp = _now + delay; Task last = _head._prev; while (last != _head) { if (last._timestamp <= task._timestamp) break; last = last._prev; } last.link(task); } }
/* ------------------------------------------------------------ */ public Timeout(Object lock) { _lock = lock; _head._timeout = this; }
/* ------------------------------------------------------------ */ public Timeout() { _lock = new Object(); _head._timeout = this; }