public class Clock extends Thread { private Clocked m_target; private long m_start; private long m_interval; private float m_rate; private long m_count; public Clock(Clocked t, float s,float i,float rate) { m_target = t; m_interval = (long)(i*1000); m_start = (long)(s*1000); m_rate = rate; m_count = 0; //setDaemon(true); } public void run() { try { System.out.println("waiting in start time"); sleep(m_start); } catch(InterruptedException e) { } System.out.println("Wake up from start time"); while(true) { try { System.out.println("in sleeping"); sleep(m_interval); } catch(InterruptedException e) { } System.out.println("out sleeping"); if(!m_target.Alive()) break; m_count ++; float rate = (float)m_target.getSize()/((float)m_interval*m_count); if(rate < m_rate) { m_target.stop(); System.out.println("rate is too low, stoped"); } else m_target.setRate(rate); } } }