package simple; public class Timer { private static final int TIMER_STOPPED = -1; private static final int MAX_TIMEOUT = 5; private Machine machine; private int time; public Timer( Machine machine ) { this.machine = machine; this.time = TIMER_STOPPED; new Thread() { public void run() { while (true) { if (time == 0) { Timer.this.machine.timeout(); time = TIMER_STOPPED; } else if (time > 0) { time--; try { sleep(1000); } catch (InterruptedException e) { } } } } }.start(); } public void reset() { time = MAX_TIMEOUT; } public void stop() { time = TIMER_STOPPED; } public boolean isStopped() { return time == TIMER_STOPPED; } public boolean isRecentlyReset() { return time >= MAX_TIMEOUT - 1; } }