package com.flaremicro.flaretv.visualforecast; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import com.flaremicro.flaretv.visualforecast.interfaces.Tickable; public class Executor { private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private final Tickable tickable; private final long sleepNanos; //private long nextTick = 0; Executor(Tickable tickable, long sleepNanos) { this.tickable = tickable; this.sleepNanos = sleepNanos; } Executor(Tickable tickable, int ticksPerSecond) { this(tickable, (long) ((1 / (double) ticksPerSecond) * 1000000000L)); } public void end() { scheduler.shutdown(); } public void begin() { scheduler.scheduleAtFixedRate(new Runnable() { public void run() { tickable.tick(); } }, 0, sleepNanos, TimeUnit.NANOSECONDS); } }